-
首先说明下指针数组和数组指针
-
指针数组:int * parr[3];
结合性 int *(parr[3]);
指针数量:3;
PS:
-
首先作为数组为一个整体。int* 表示数组里保存的是地址。
-
parr不能单独使用,parr[n]作为指针才是可操作的
-
p[n]作为int * ,++步长为sizeof(int)
-
-
数组指针:int (*arrp)[n];
PS:
-
这里只有一个指针arrp
-
指针步长为sizeof(int)*n
-
-
接下来说一下 int(*p)(int) 和 int *(*p(int))[3].
-
int(*p)(int)
很简单指向参数int返回值int的函数指针
-
int *(*p(int))[3]
没搞定,待续。。。
PS:p(int)结合。参数为int,返回值为 int *(*)[3] 指针数组的指针。
学习笔记
-
指针类型
把指针声明语句的指针名字去掉,剩下的部分就是指针的类型。
(1)int (*ptr)[3];//指针类型是 int(*)[3]
(2)int *(*ptr)[4];//指针类型是 int *(*)[4]
-
指针所指向的类型
当用指针访问所指向的内存区时,指针所指向的类型决定了所取内容的大小和步长
把指针声明语句中的指针名字和名字左边指针*去掉,剩下的就是指针所指向的类型。
(1)int *p; //指针所指向的类型是int
(2)int (*p)[3];//指针所指向的内容是int ()[3]
(3)int *(*p)[3];//指针所指向的内容是int *()[3]
这里指针的类型(指针本身类型)和指针所指向的类型是两个概念.
-
指针的值
指针的值就是本身存储的地址。所指向的内存区就是从指针的值所代表的内存地址开始,
长度为sizeof(指针所指向的类型)的内存区。或者说指针的值是这块内存的首地址。
-
分析指针的思路:
-
这个指针的类型是什么?
-
指针指向的类型是什么?
-
指针指向哪里?
-
最后记一个指针解读通用的左右法则:
The right-left rule: Start reading the declaration from the innermost parentheses, go right, and then go left. When you encounter parentheses, the direction should be reversed. Once everything in the parentheses has been parsed, jump out of it. Continue till the whole declaration has been parsed.