C: 读懂Pointer声明格式
来源:互联网 发布:无限接收器软件下载 编辑:程序博客网 时间:2024/05/21 18:40
以下大部份内容都是转载,间中加插个人理解。
如有兴趣者,请叁考以下原址:
http://www.cquestions.com/2009/11/how-to-read-complex-pointers-in-c.html
要看懂的Pointer声明格式Golden Rule:优先权和连结方向
切记(), []是有第一优先权,其次才是*号。
它,在看明pointer声明时,拥有决定性的作用。
(),代表一个function。
[],代表一个Array。
*,代表pointer。
Identifier,代表变量名子。
Data type,代表什麽类型
以上都是一个声明所会拥有的element。
Associative,即是声明的连结方向。
它,在看明pointer声明时,拥有决定性的作用。
当看到()或[]或*时,脑海里就要补上一个方向,如:
“–>()”,”<–*”
但其实,只要记得“<–*”就可以了,* 就是右到左。
当知道Golden Rule,就能应用了。
例子1:
char (* ptr)[3]
分析:
第一就是要看清楚优先权,当自己是电脑,哪个先处理。
以上例子有三部份,
1. char
2. (* ptr)
3. [3]
2,3有相同优先权,哪先处理哪个?
就是看连结方向!!
(),[]是左到右,所以,先处理2,然後3。
之後,no.2 中,要再深入分析。*和 ptr,先处理哪个?
*拥有优先权,所以先处理*。
总结就是以下的次序:
ptr 是一个 pointer,这个pointer指向一个3个element的数组。
而这个数组是char type的。
其实就是解答了三个问题:
1. ptr是什麽?
2. pointer指向什麽?
3. 数组又是什麽的data type
例子2:
char * ptr[3]
分析:
如果是没加上括号,那这个声明又是另一回事了。
例子有三部份,
1. char
2. *
3. ptr[3]
[]有优先权,所以会先处理3,然後2,最後1。
ptr是一个3个element数组,数组的datatype是一个pointer,而这个pointer是指向一个char类型的。
简单来讲,就是声明一个装上了pointer的数组。
例子3:
int ( * ( * ptr ) [ 5 ] ) ( )
分析:
虽有点复杂,但也不难。处理方式一样。
有三部份。
1.int
2.(* ( * ptr ) [ 5 ] )
3.()
()同等优先,但()左到右原则,会先处理2。
处理NO. 2.
* ( * ptr ) [ 5 ]
这个简单,跟例子1很相似。
ptr是一个pointer,它指向一个5个element的数组。
而数组装了pointer。
而这个pointer又指向什麽?
No.3 告诉你了, 指向一个function。
最後就是这个function 有一个 int的 return type。
简单来讲,就是ptr指向一个数组,数组装有指向function的pointer。
转载的网上还有更多例子。有兴趣者可看一看。
总结
要看明白,就是问自己问题,然後根据Golden Rule次序来解答。见到*,就要问自己它指向什麽,见到[],就要问自己数组的类型是什麽,见到(),就要问自己function的return type是什麽,存入的parameter是什麽。
猩猩喜欢由右走到左。
- C: 读懂Pointer声明格式
- 【C/C++】读懂C声明的黄金法则(链接)
- 读懂C语言中复杂的指针声明
- c pointer
- Objective-C 声明方法的格式
- 读懂Objective-c语言
- 读懂C/C++递归
- Mad Pointer in C
- About C pointer...
- Pointer On C-1.1
- pointer on c
- c and pointer care
- Pointer in C/C++
- java:reference C++:pointer
- c pointer and array
- initial pointer [expert c]
- c and pointer : chp8
- [C++] smart pointer
- React(4. 1)--数据流(理论篇)
- Comparable接口
- Android温习之路Day4java基础4
- blender 学习 玻璃杯
- uva1625 Color Length
- C: 读懂Pointer声明格式
- 微信应用号真的来了
- laravel开发环境搭建
- 进程与线程的一个简单解释
- 计算机控制技术课程配套教材习题解答(第4、5章)
- 使用函数指针和map加载不确定配置文件的实现
- JavaScript基础
- SVM的两个参数 C 和 gamma
- pb三层架构