有关C++函数调用问题。不明白里面的指针和&的用法。

如题所述

C++调用函数的时候就是转向函数的入口地址,而函数指针就是保存的函数的入口地址所以你使用发fp(a,b)调用就相当于函数名调用你使用(*fp)(a,b)调用相当于把a,b作为参数,传递到fp指向的地址所以效果是一样的其实函数调用的时候使用函数名 f_i(a,b) 和 (*f_i)(a,b) 也能得到正确的结果道理也是一样的最后有一个问题就是不知道是否和编译器,可能不同的编译器会有不同的处理,我用的g++,没有问题。建议最好直接使用指针名调用 fp(a,b)希望对你有帮助。追问

我不明白为什么函数声明处和被调用函数是三个指针,而开始调用处是两个&?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-06-24

&符号在c++中有多个意义。估计你是将引用符号和取地址操作符弄混了。

举个栗子:

char ch = ‘A’;
char * pch = &ch;    //这里的&就是取地址操作符,用来获取变量ch的地址
char & refch = A;    //这里的&是引用类型的标识。

再看函数调用

从经典的swap函数来看

int swap(int , int);    //这个基本没什么卵用,达不到目的
int swap(int *, int *);    //这个就是地址传递,会修改实参所指向地址的值
int swap(int &, int &);    //这个是引用传递,调用的时候最直观,修改实参的值

上边三个函数,如果第一个和第三个同时存在,调用的时候是会报错的。

追问

我不明白为什么函数声明处和被调用函数是三个指针,而开始调用处是两个&?

追答

看看三个函数的调用

int a = 10, b = 100;
//int swap(int, int)
swap(a, b);    //执行完毕后,a = 10, b = 100;
//int swap(int*, int *)
swap(&a, &b); //这里的&是取地址符号整个调用过程可以细化一下
{
    int * x = &a;        //通过取地址符&获取变量的地址
    int * y = &b;
    cout << "x = " << x << endl
            << "y = " << y << endl
            << "a = " << a << endl
            << "b = " << b<< endl;
    swap(x, y);        //实际传入的参数是整形指针变量。执行完毕后,x, y 不变,
                            //实际改变的是a, b;
    cout << "x = " << x << endl
            << "y = " << y << endl
            << "a = " << a << endl
            << "b = " << b<< endl;
}
// int swap (int&, int&)
swap(a, b)   ;    //执行完毕后, a,b的值改变。之际的调用过程是这样的
{
    int &x = a;        //这里的&是引用标识符
    int &y = b;
    swap(x, y);        //实际传入的是a, b的引用
    //同样可以将执行前后的 值都打印出来看看
}

本回答被网友采纳
相似回答