假如调用函数输入&A对应被调用函数的*X,
那么意思是把A的地址复制给X还是复制给*X。
重点是为什么?如果是复制给X,那么那个*只是作为说明X是指针么?
假如调用函数输入&A对应被调用函数的*X,
那么意思是把A的地址复制给X还是复制给*X。
重点是为什么?如果是复制给X,那么那个*只是作为说明X是指针么?
我想楼主并不是想问函数指针吧,根据楼主对问题的描述,他实际上是说类似:
fun(int * p);
int a = 1;
fun(&a);
的问题。
其实很简单,*一般称指针运算符,&地址运算符,而在定义一个变量的时候*只是表示这是一个指针。
所以上面int *p表示p是一个整形指针,然后调用的时候&a取得了a的地址,并传递给fun(int *),即是你所谓p=&a;
而*作为运算符出现时,表示反向引用,即对p所表示的地址空间进行操作。
所以如果你问的函数指针,那么以函数指针为参数的 fun(int (*pfun)()),因为C语言本身用函数名表示函数的入口地址,所以调用时你可以写成 fun(&functionname),也可以写成 fun(functionname),都不错。同样定义中的*也只是表示指针而已。
后面还有关于(*fun)(param)的调用方式的讨论,其实你可以这么理解,函数名是函数的地址,那么我们必须要先进行一个反向引用去取得这个“函数”即是*的作用,然后进行“()”运算即函数运算(调用)。当然这个和数组又不同,所以去记忆理解这些东西,即晦涩对你还没帮助,所以呢(*FUN)(PARAM)这种调用方式你最好是当成没看到最好。
首先一个函数例如:
void fun() ,函数名对于编译器来说就是做为一个地址表示的,所有调用并不需要&fun
void (*pfun)() == 函数指针指向一个一个无参数返回类型为void的指针当
pfun = fun 这是个赋值过程将fun的地址赋予pfun,(pfun是个指针,其存储的男人就是fun地址),也可以写成pfun = &fun
pfun() 调用fun函数,这里你可能会疑惑为什么不是(*pfun)(),因为前面说了pfun存储的是fun的地址那么必须要*pfun才表示fun地址哈?没错你也可以写成(*pfun)(),也是调用fun,这所有的只是C编译器的解析,它认为pfun() 和(*pfun)()是一样的