要点1,关于标识符在声明、被强制转换时和被调用时的方法的联系和不统一性:
比如
int *p=1;和int *p;p=1;
比如
char (*j)[20];
j=(chair(*)[20])malloc(20);
比如在声明中()通常代表函数的出现。
要点2,关于类型声明符和类型限定符的作用对象:
文中举例:const int * const p;不得不说此处有关于指针的知识;
而更极端的例子是:volatile char *const int*const p;//实际上我未进行验证,意义应该为p指针本身为const的 ,指向的内容为const int的,而该内容指向的内容为volatile char的。
要点3,关于声明中的优先级的分析:
文中举例的复杂程度较高的声明实际上都和“函数指针”的声明相关,所以有关于函数指针的基础扎实的话应该不会有问题。
关于它的“图标分析”声明优先级我概括如下:声明时首先找到最左边的标识符然后看下此标识符的右边有没有“[]”或者“()”,因为这两者的优先级除了括号以外最高,如果标识符有被什么括号包括的话那么就就把这个括号当成整体,而关于const 、int、 *、volatile 等为修改哪个应该通过以上要点已经清楚了。
总得来说就是函数指针,指针数组,数组指针的套路了,如(*next)(int)为函数指针的声明.
typedef int (*ptr_to_int_fun)(void);
(ptr_to_int_fun) p;
这是在声明代码段中一种充分利用资源的复用。
int_ptr a,b;
本意是a和b都是int型指针,但是实际上变成
int* a,b;
a是int型指针,而b是int型变量。这时应该使用typedef定义:
typedef int* int_ptr;
int_ptr a,b;
这样a和b就都是int型指针了。
本文深入探讨C语言中声明语句的复杂性和理解技巧,包括标识符的使用、类型声明符的作用、声明优先级分析等内容,并对比了typedef与#define的区别。
793

被折叠的 条评论
为什么被折叠?



