注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。
测试环境:Ubuntu 10.10
GCC版本:4.4.5
一、笔试中的问题
下面的标识符代表什么含义?
int (*p1)(int*,int (*f)(int*));
int (*p2[5])(int*);
int (*(*p3)[5])(int*);
int*(*(*p4)(int*))(int*);
int (*(*p5)(int*))[5];
二、指针阅读技巧解析
1) 左右法则
- 从最里层的圆括号中未定义的标示符看起
- 首先往右看,再往左看
- 遇到圆括号或方括号时可以确定部分类型,并调转方向
- 重复2、3步骤,知道阅读结束
编程实验
复杂指针的阅读
37-1.c
#include <stdio.h>
int main()
{
//int*和int (*f)(int*)是函数int (*p1)(……)的参数
int (*p1)(int*, int (*f)(int*));
//函数名是数组,函数类型:int (……)(int*)
int (*p2[5])(int*);
int (*(*p3)[5])(int*);
int* (*(*p4)(int*))(int*);
int (*(*p5)(int*))[5];
return 0;
}
小结:
1) 右左法则总结于编译器对指针变量的解析过程
2) 指针阅读练习的意义在于理解指针的组合定义
3) 可通过typedef简化复杂指针的定义