在编程中,会遇到这样的情况: int *p[n]; int (*p)[n]; 还有一种情况是声明函数: int *p(); int (*p)(); 这些分别表示什么意思呢? 表面上看这些问题,好像是指针,但是,如何来正确判断这几个定义,需要我们首先有运算符优先级的概念。 在c语言中,[]和()的优先级比星号(星号的名字叫做“指针运算符”)要高,所以,在这几个声明中,先看[]和()。 让我们来逐步分析: 再看另一个: 同样的道理,可以分析 int *p();和int (*p)(); 注意,这里我们对于星号赋予了不同的含义。阐述如下: 这里,第二行中的星号表示“定义了一个指向int型数据的指针,为什么呢?因为实际上,* 相当于 (int *),定义了一个指向int型数据的指针。 换句话说,如果星号前面有表示类型的int,void等数据,我们认为,这里的星号的意义,是“定义了一个指针” 那么,让我们回头看看int *p[n]和int (*p)[n]。 |
int *(*p)[4];(*P)表示p是一个指针,然后与右边的[]结合,表示P是指向一个有四个元素的数组,
int *表示返回指向整形的指针,所以int *(*p)[4];表示p指向一个有含有四个指向整形的指针元素的数组
int (*p)(int)是函数指针,如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
int* p(int x);是一个返回值为int型指针的函数的声明
可以用typedef 定义函数指针类型,用于定义函数指针;
int *p(int),不就是个函数声明么
int*是返回值类型,p是函数名,(int)是参数类型
p是函数,函数参数是一个int整型,返回值是指向一个整型的指针(int *)
设有语句int(*p)();则p是一个( ) A.指向一维整型数组的指针变量 B.指针函数,该函数的返回值为指向整型变量的指针 C.指向函数的指针变量,该函数的返回值为整型 D.数组指针,它的每个元素都是一个可以指向整型变量的指针变量
p是指向函数的指针变量,这题选C。 具体用法: 你可以定义一个 int func()的函数;可把函数func()赋给p作为p的值,即把func()的入口地址赋给p,以后就可以用p来调用该函数,实际上p和func都指向同一个入口地址,不同就是p是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。