打开去年6月的一个test.cpp文件,发现对里面测试的函数指针几乎没有印象了。温故而知新, 于是重新找到ANSI C 里面的说明:
除了声明指向整型数字、双精度型数字和C语言其他数据类型的指针外,指针也能够被声明指向一个函数(包含一个函数的地址)。指向函数的指针是可能的,因为函数名像数组名一样,它们本身是指针常量。例如,首部行:
int (*cal) ()
声明calc是指向返回一个整数的函数指针。这意味着
1:calc包含一个函数的地址
2:这个地址在变量calc中的函数返回一个整型数值。
例如,如果函数sum()返回一个整数,则复制语句calc = sum; 是有效的。
下面要写的:
1:下面的两个声明:
int* p1;
char* p2;
如果说p1与p2的区别是前者从保存的起始地址内连续读取4个字节(典型的一个int的长度),而后者读取1个字节。那么对于一个函数指针
int (*p3) ()
p3与前二者的区别于联系又是怎么样的?
2: 为了说明上面的问题,指针的数据结构是怎么样的?工作机制是什么?