说说指针

大部分程序员多说指针都是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    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值