指针练习2

一、题目一

#include <stdio.h>
int main()
{
 char *a[] = {"work","at","alibaba"};
 char**pa = a;
 pa++;
 printf("%s\n", *pa);//输出结果时at
 return 0;
}

pa指向数组a首元素的地址,如下图所示,pa++指向的是数组的下一个位置,对其解引用之后得到a[1]的值也就是at

二、题目二

#include <stdio.h>
int main()
{
 char *c[] = {"ENTER","NEW","POINT","FIRST"};
 char**cp[] = {c+3,c+2,c+1,c};
 char***cpp = cp;
 printf("%s\n", **++cpp);//POINT
 printf("%s\n", *--*++cpp+3);//ER
 printf("%s\n", *cpp[-2]+3);//cpp[2]==*(cpp-2)//ST
 printf("%s\n", cpp[-1][-1]+1);//cpp[-1][-1]=*(*(cpp-1)-1)+2,EW
 return 0;
}

下面我们可以通过画图来理解

第一个输出是POINT,因为cpp加1,指针向前移一个单位,指向了c+2再通过解引用得到对应的值

第二个输出是ER,我们先看第一个解引用符号*++cpp是指向c+1的位置的,但是它再通过二次解引用*--之后,那么原本指向c+1的位置就指向了c的值,然后得到了ENTER,但是它得到了ENTER的值后数组向右移了3个单位,那么得到的最终结果是ER。

第三个输出是ST,cpp原来指向的是c+1的位置,但是在*cpp[-2]下往前移了两个单位,指向了c+3,那么对应的值就是FIRST,在这个数组中再+3那么就得到了ST。

第四个输出的是EW,cpp[-1]使得它指向了c+2的位置,但是再-1之后就变成了c+1,随之就是指向了c+1的位置,那么得到的值就是NEW,数组NEW+1得到的值就是EW。

三、总结

通过这一次练习,我们更能清楚运用指针来解决问题,就是多画图,多练,我们才能更加熟悉指针,还要牢记基础的概念等,到了这里,关于指针的内容就告一段落了,感谢大家的支持

  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值