一:函数指针和指针函数
函数名后面跟一对圆括号(兴许括号内还有参数),将导致去计算这个函数。
仅仅一个函数名则意味着是一个指针,是一个地址,是指向这个函数的。
1指针函数
类型名 *函数名(函数参数表列);
其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。
2函数指针:
类型名 (*函数名)(函数参数表列);
指针。函数指针有两个特殊用途,不太熟练的程序员可能很少使用函数指针,但在某些场合下若借助于函数指针,则会使程序显得非常精练。
定义函数指针:void (*f)(x,y) 表示把f定义为一个指向带有(x,y)这样类型的函数指针,该函数的返回类型为void。他可以容纳地址。如果他被赋值为某个函数的地址。如 f=test_fun 则f表示test_fun 的地址。调用函数时 f(),和test_fun()
均可以调用这个函数。只需要明白函数的调用是 地址+括号
二:数组指针与指针数组
注意"int *pa[5]"与"int (*pb)[5]"的区别。
int (* pb)[5];
表示定义了一个指向数组的指针pb,pb指向的数组是一维的体积为5的整型数组。
char * line[5];
表示line是一个5个元素的数组,每个元素是一个指向字符型数据的一个指针。
另外单独一个数组名表示数组的首地址,如line表示是数组line[5],的首地址。Line[1]表示数组的第一个元素,line=&line[0],如果数组被定义为一个