C-复杂的声明的阅读
来源:互联网 发布:淘宝摄影发展趋势 编辑:程序博客网 时间:2024/05/17 08:58
C-复杂的声明的阅读
C语言中有许多魔鬼般的声明,让人看到就害怕, 比如:
int ((*p)(int))[5];
这里p是个什么玩意你知道吗??
其实,对于C语言中的复杂声明,我们只要掌握了一定阅读原则,想知道这个声明到底声明什么东西就很简单了
- 阅读原则
- 前提: 他们的优先级你应该知道
- 数组的[]与函数的()有同样的优先级
- []与()都是从左到由进行结合的
- 的优先级低于 []与(), 但是()会使*具有更高的优先级
- 阅读复杂声明的左右法则
- 从最里层的圆括号中未定义的标识符开始看
- 首先往右看,再往左看
- 当遇到()或者[]可以来确实能够部分类型,并调转方向
- 重复步骤2,3, 直到阅读结束
- 前提: 他们的优先级你应该知道
以 int (func)(int) 为例
下面再来看几个复杂的声明:
1) int (p2)(int, int(f)(int)); p2是一个函数指针
-> p2是一个指针, 指针指向一种函数, 函数的类型为: 返回值为int, 参数分别为一个int* 指针, 和一个函数指针f, f指向的函数类型为:返回值为int, 参数类型为int*
2) int (p3[5])(int) p3是一个指针数组
->p3是一个数组, 数组中的每个元素都是指针,指向函数, 函数的类型为:返回值为int, 参数为int*
3) int ((*p4)[5])(int) p4是一个数组指针
-> p4是一个指针,指向一个有5个元素的数组, 数组中的每个元素都为指针,且指向函数类型为:返回值为int, 参数为int*的函数。
4) int ((*p5)(int))[5] 即p5一个3级指针数组,数组的元素个数为5
->p5是一个指针,指向的类型为int*,然后再个p5的指针升一级, p5变成3级指针,指向一个数组,数组的元素类型为int
这些复杂的声明,估计也就在面试题,或者一些NB代码时可能遇到(比如linux内核源码)
0 0
- C-复杂的声明的阅读
- 如何阅读复杂的C定义/声明
- 如何阅读复杂的C定义/声明
- 复杂的C++声明阅读
- c的复杂声明
- 复杂的c声明
- 阅读复杂指针声明语句的技巧
- C复杂的函数声明
- C语言的复杂声明
- 复杂的C 语言声明
- C复杂的函数声明
- C/C++ 复杂的声明
- 复杂的C/C++声明
- 复杂的c/c++声明
- 复杂的c-c++声明
- C语言的复杂声明
- C/C++ 复杂的声明
- C/C++:如何理解复杂的声明
- AsyncTask异步消息处理机制
- Linux中修改环境变量及生效方法(永久、临时)环境变量查看
- Struts2系统学习(16)OGNL表达式及基本原理分析
- hdoj 5500Reorder the Books【规律】
- Android学习之路
- C-复杂的声明的阅读
- 15、泛型
- hdu5558 Alice's Classified Message
- 幻 一
- C-动态内存分配与野指针
- require学习笔记总结
- AIDL Service
- 关于View的文章
- 幻 二