复杂指针的定义(含复杂函数指针)
2013-11-11 13:03
169 查看
引言
指针是C/C++语言中很重要的机制,一些C语言高级用法基本都需要指针的参与。一些复杂指针可能理解起来有点难度,但只要你掌握相应的技巧,这一切都能迎刃而解。
本文从定义的角度,解析复杂指针。
具体解析过程
int p;定义普通变量p
int *p;
定义一个指向int变量的指针p
int p[3];
定义一个含有三个元素的数组p
int *p[3];
[]优先级比*高,因此p先与[]结合,说明p首先是个数组,
然后再与*结合,说明数组中的元素是指针,
然后再与int结合,说明该指针指向的类型是int。
int (*p)[3];
()的优先级最高,因此p先与*结合,说明p首先是个指针,
然后再与[]结合,说明指针指向的内容是数组,
然后在与int结合,说明数组中的元素为int。
int **p;
p与最近的*结合,说明p首先是个指针A,
然后再与*结合,说明该指针指向的内容也是一个指针B,
然后再与int结合,说明指针B指向的内容为变量int。
int p(int);
p与()结合,说明p首先是个函数,
然后再与int结合,说明函数的返回值是int变量。
int (*p)(int);
()的优先级最高,因此p先与*结合,说明p首先是个指针,
然后再与()结合,说明该指针指向的内容是函数,
再与括号里面的int结合,说明该函数的参数有一个int,
再与前面的int结合,说明该函数的返回值为int。
int *(*p(int))[3];
()的优先级最高,因此p先与()结合,说明p首先是个函数,
再与括号内的int结合,说明函数的参数为一个int,
再与p前面的*结合,说明函数的返回值为一个指针A,
再与后面的[]结合,说明该指针A指向的内容是一个数组,
再与第一个*结合,说明数组里面的元素是指针B,
再与前面的int结合,说明指针B指向的内容是一个int。
int (*(*p)(int))(int);
()的优先级最高,因此p先与*结合,说明p首先是个指针A,
再与后面()结合,说明该指针A指向的内容是一个函数A,
再与括号中的int结合,说明该函数的参数是一个int,
再与(*p)前面的*结合,说明该函数的返回值是一个指针B,
再与最后面的()结合,说明该指针B指向的内容提要是一个函数B,
再与括号中的int结合,说明该函数B的参数是一个int,
再与前面的float结合,说明函数B的返回值为float。
相关文章推荐
- 解读C语言中函数指针数组构成的复杂定义
- 理解复杂的C/C++声明 const, typedef , 函数指针
- 定义struct/struct定义在哪里/函数返回指针类型/指针数组与数组指针/{}里是局部定义/fabs、abs
- 22、C++用指针作函数参数,定义一个函数,并用函数交换两个整型变量的值
- oj Problem F: 复杂类型作函数参数之结构体指针做参数
- 为什么在函数中不能通过指针返回本地定义的变量
- 转:简单类型指针的与复杂类型指针定义以及分配的问题
- 指向函数的指针类型定义
- c 函数指针 和 返回函数指针的函数 的定义方法
- 注意有指针参数的函数定义与函数实现 必须一致,编译器只检查是否是指针,而不管你的实参是几维指针
- 利用typedef定义函数指针
- 函数指针作为某个函数的参数及定义函数指针
- typedef 为数组和函数指针定义别名
- 函数传参、传引用、传指针时间复杂度分析
- 函数指针的定义及多个函数指针的定义
- 利用结构体作为函数参数时结构体指针的定义
- typedef定义函数指针
- 定义一个函数指针类型
- 一劳永逸:关于C/C++中指针、数组与函数复合定义形式的直观解释
- 定义返回函数指针的函数