设有如下定义:int (*ptr)( );则以下叙述中正确的是
B. ptr 是指向int 型数据的指针变量
C. ptr 是指向函数的指针 ;该函数返回一个int 型数据 未知吖
D. ptr 是一个函数名 ;该函数的返回值是指向int 型数据的指针
求分析 展开
C。
ptr函数返回一个int 型数据 //这个才是正确的,理由是int fun();显然是一个函数说明,fun换为(*ptr),则ptr就是指向函数的指针了。
int (*ptr)[m] ptr是一个指向m长度的线性内存空间,即m大小的一维数组
int(*ptr)() ptr是一个返回值为int ,参数列表为空的函数指针类型。
例如,int *p,先根据优先级,等效于*(p),所以p本质上是一个有三个元素的数组;那么数组的每个元素是一个指针;那指针指向是指向一个int型的数据;所以整理一下就是p是一个有三个指向int数据的指针的数组,本质上就是一个数组。
扩展资料:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。
参考资料来源:百度百科-函数指针
我们先从一步一步的分析,
1,ptr和*最近且在()里面一次运算优先级最高,从这里可以看出ptr是一个指针
2,接着我们出(),把*ptr计做x,则可以看成是int x(),我们很容易看出这是一个函数
而且这个函数没有参数,有一个int类型的返回值
结合上述两点,我们知道ptr是一个指向函数的指针,它指向的函数无参,有一个int类型的返回值
分析:
排除法
A数组的表示方法是中括号。,故不正确
B 指向int型数据的指针变量是 int *ptr
C ptr是指向函数的指针。那函数呢?函数必有函数名对吧。找不到。故不正确