【发布时间】:2013-05-10 22:21:44
【问题描述】:
就这种行为而言,为什么function pointer 的行为类似于array pointer?我的意思是,让我们从数组list[] 的情况开始,我们将考虑&list 和list。
char name[5]= "Eric",(*aptr)[5]=&name;
printf("%p,%p",*aptr,name); //BOTH ARE NUMERICALLY SAME
我们也可以将数组元素称为(*aptr)[1]、(*aptr)[2] 等。我明白这里发生了什么。
但是为什么函数同样适用呢?毕竟“函数”本身并不是一个由类似元素组成的连续内存块,就像数组一样。考虑一下。
假设fptr是我程序中的函数指针。为什么fptr和*fptr在打印时给出相同的值?*fptr是什么意思?我只知道我们可以调用一个函数使用它的指针为(*fptr)() 或fptr(),那么单独的*fptr 是什么?
#include<stdio.h>
void foo(){};
int main(void)
{
void (*fptr)()=foo;
printf("%p,%p",fptr,*fptr);
}
结果- 00401318 00401318
【问题讨论】:
-
函数可以隐式转换为函数指针,如果取消引用函数,它会再次转换为函数指针。然后再次。再说一次......你也可以毫无问题地做
****************fptr。
标签: c function-pointers