以下声明代表什么?
答案:1 悬赏:0 手机版
解决时间 2021-01-18 15:03
- 提问者网友:焚苦与心
- 2021-01-18 09:36
以下声明代表什么?
最佳答案
- 五星知识达人网友:三千妖杀
- 2021-01-18 11:14
C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。
右左法则:首先从未定义的标识符开始阅读(而不是从括号读起,之所以是未定义的标识符,是因为一个声明里面可能有多个标识符,但未定义的标识符只会有一个),然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。
根据上面的理论讨论你这几个声明(不是全部):
double (*f[10])();
f右边是一个[]运算符,说明func是一个具有10个元素的数组,f的左边有一个*,说明f的元素是指针,要注意这里的*不是修饰f的,而是修饰f[5]的,原因是[]运算符优先级比*高,f先跟[]结合,因此*修饰的是f[5]。跳出这个括号,看右边,是一对圆括号,说明f数组的元素是函数类型的指针,它所指向的函数具有double类型的返回值。
int *((*b)[10]);
b被一个圆括号包含,左边又有一个*,那么b是一个指针,跳出括号,右边是一个[]运算符号,说明b是一个指向数组的指针,现在往左看,左边有一个*号,说明这个数组的元素是指针。总结一下,就是:b是一个指向数组的指针,这个数组的元素是指向int类型元素的指针。
Long(*fun)(int );
首先找到那个未定义的标识符,就是fun,它的外面有一对圆括号,而且左边是一个*号,这说明fun是一个指针,然后跳出这个圆括号,先看右边,也是一个圆括号,这说明(*fun)是一个函数,而fun是一个指向这类函数的指针,就是一个函数指针,这类函数具有int类型的形参,返回值类型是 Long。
剩下3个指针声明你自己根据上面的例子来解析吧!
右左法则:首先从未定义的标识符开始阅读(而不是从括号读起,之所以是未定义的标识符,是因为一个声明里面可能有多个标识符,但未定义的标识符只会有一个),然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。
根据上面的理论讨论你这几个声明(不是全部):
double (*f[10])();
f右边是一个[]运算符,说明func是一个具有10个元素的数组,f的左边有一个*,说明f的元素是指针,要注意这里的*不是修饰f的,而是修饰f[5]的,原因是[]运算符优先级比*高,f先跟[]结合,因此*修饰的是f[5]。跳出这个括号,看右边,是一对圆括号,说明f数组的元素是函数类型的指针,它所指向的函数具有double类型的返回值。
int *((*b)[10]);
b被一个圆括号包含,左边又有一个*,那么b是一个指针,跳出括号,右边是一个[]运算符号,说明b是一个指向数组的指针,现在往左看,左边有一个*号,说明这个数组的元素是指针。总结一下,就是:b是一个指向数组的指针,这个数组的元素是指向int类型元素的指针。
Long(*fun)(int );
首先找到那个未定义的标识符,就是fun,它的外面有一对圆括号,而且左边是一个*号,这说明fun是一个指针,然后跳出这个圆括号,先看右边,也是一个圆括号,这说明(*fun)是一个函数,而fun是一个指向这类函数的指针,就是一个函数指针,这类函数具有int类型的形参,返回值类型是 Long。
剩下3个指针声明你自己根据上面的例子来解析吧!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯