大部分程序员多说指针都是c语言的灵魂,这句话也对也不对,当我们对内存图有相当的了解是会发现指针只是内存图所反映出来的一些东西而已,内存图可以帮助你们更加的了解指针。
先看定义: int * p; //这里就定义了一个一级指针 前面讲数组指针的时候也说过指针希望存地址 当然也可以不存地址
int i = 10 ;
p = &i;
这就是一个简单的指针的对应
int arr[2] = {0};
int *p =arr; //数组名代表数组的首地址
假如这里的 arr 的地址是0xbf803782 那么*(p + 1)代表的是地址是加多少? 加 4 对吧,为什么因为指针所指向的类型是 int *
int *p;
short **p1 = &p; 当然这里编译器会给我警告,可以不管,那个这里的*(*(p1 + 1))家里多少的字节?还是+4 为啥?应为这里 p1 指向的是 short ** 型 哪里存的是是什么?这很简单嘛,存的是地址嘛。那么你都知道里面存的是地址了,那理解起来就很简单了,在linux 下地址是4个字节的少了存不下,所以这里 + 4
所以我们理解指针就很简单了
int *p *(p + 1) = 地址 + 4
short *p *(p + 1) = 地址 + 2
short **p *(p + 1) = 地址 + 4
char *p *(p + 1) = 地址 + 1
所以我们了解指针+1 地址加几的时候只需要看指针指向的是什么就行了
-----> int * +4 ------------> short * +2 -----------------> char * * +4 (注意)这里和short ** 指向的都是指针所以是+4!!!!!!
------> char * +1 -------------> shor ** +4