C和指针--高级声明

1.

int *f();

分析:必须确定表达式*f()是如何进行求值的。首先执行的是函数调用操作符(),因为它的优先级高于间接访问操作符。因此,f是一个函数,它的返回值类型是一个指向整型的指针。

2.

int (*f)();

分析:确定括号的含义是分析这个声明的一个重要步骤。第2对括号是函数调用操作符,第1对括号只起到聚组的作用。它迫使间接访问在函数调用之前进行,使f成为一个函数指针,它所指向的函数返回一个整型值。

3.

int *(*f)();

分析:这个和第2个声明基本相同,f也是一个函数指针,只是所指向的函数的返回值是一个整型指针,必须对其进行间接访问操作才能得到一个整型值。

4.

int *f[];

分析:下标的优先级更高,所以f是一个数组,它的元素是指向整型的指针。

5.

int (*f[])();

分析:首先,必须找到所有操作符,然后按照正确的次序执行它们。同样,这里有两对括号,它们分别具有不同的含义。括号内的表达式*f[]首先进行求值,所以f是一个元素为某种类型的指针的数组。表达式末尾的()是函数调用操作符,所以f肯定是一个数组,数组元素的类型是函数指针,它所指向的函数的返回值是一个整型值。

6.

int *(*f[])();

分析:由5,这个声明创建了一个指针数组,指针所指向的类型是返回值为整型指针的函数。

猜你喜欢

转载自www.cnblogs.com/jingliang10101/p/9809495.html
今日推荐