指针深刻理解

     char* c[]={"ENTER","NEW","POINT","FIRST"};
     char** cp[]={c+3,c+2,c+1,c};
     char*** cpp=cp;
     printf("%s\n",**++cpp);
     printf("%s\n",*--*++cpp+3);
     printf("%s\n",*cpp[-2]+3);
     printf("%s\n",cpp[-1][-1]+1);

c:指针数组,每个元素指向一个字符串,存放的是每个字符串首字母的地址,数组的每个元素是char*


cp:数组,每个元素是指向char*的(地址/)指针


cpp:是一个指向char**的指针,指向数组cp的首地址,通过cpp访问数组cp和数组c中的元素


**++cpp:++有副作用,会改变值,cpp存cp数组中第二个元素的地址,指向c+2,第一次解引用得到对象c+2,为c数组中“P”的地址,第二次解引用顺着地址找到指向的元素P,最后%s打印出从P开始往后的这一块内存空间里的东西POINT


*— —*++cpp+3:cpp在刚才的基础上又往后移一个单位,存放数组cp的第3个元素的地址,第一次解引用得到指向的内容c+1;得到c+1之后➖➖了,是内容c+1➖➖修改成了c,,也就是数组c中第一个元素的地址,再一次解引用找到数组c中第一个元素的内容,也就是E的地址,E的地址+3指向E,最后%s打印是ER


*cpp【-2】+3:*cpp【-2】🟰* *(cpp-2),cpp-2指向数组cpp中第一个元素的地址,第一次解引用得到内容c+3,即存放数组c中第4个元素的地址,再解引用找到指向的内容F的地址,F的地址+3指向S,最后%s打印是ST


cpp【-1】【-1】+1:cpp【-1】【-1】🟰*(*(cpp-1)-1)上一次的cpp不改变,cpp-1指向数组cp中第2个元素的地址,第一次解引用得到内容c+2,-1得到c+1,即存放数组c中第2个元素的地址,再解引用得到N的地址,N的地址+1指向E,最后%s打印的是EW

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值