指针数组实践

今天我们来看下面两组代码是如何进行的,指针数组是怎么运行的
在这里插入图片描述
在这几行短暂的代码里,我们输出的结果是"at",那为什么是这个结果呢?我们通过下面的示意图来看下
在这里插入图片描述
首先我们定义一个数组a,其中的每个数组元素都是char 类型的,说明每个元素都是指针类型的;然后我们又定义了一个二级指针把数组首元素的地址赋给指针pa; 随后指针pa自增1,所以此时pa指向了a[1]的地址,最后我们对pa进行解引用,得到了a[1]的值,a[1]中存放的值是’a’的地址,我们以%s的形式输出,就得到了’at’的结果. 不知大家可否明白了
下面我们再看一个难度加大的一个代码
在这里插入图片描述
看到上述代码,不知道你们是否推算成功,下面我们一起开看下过程,最重要的还是示意图必须画对
在这里插入图片描述
以上就是我对代码的一个理解,我们逐步看这几个执行语句是如何执行的
第一个,**++cpp; 指针cpp先自增1,然后指向了cp[1]的地址,然后解引用取cp[1]的值,由于cp[1]中存放的是c[2]的地址,再次解引用,取出c[2]的值,c[2]中存放的是’p’的地址,以"%s"
的形式打出,所以我们就得到了point这个结果.
第二个,*--* ++cpp+3;首先接上上面的步骤执行,cpp再次自增1,指向了cp[2],解引用,得到cp[2]的值,cp[2]中存放的是c+1;自减一,变成了c;此时cp[2]指向c[0];解引用得到c[0]的值. c[0]存放的是’E’的地址.再加3,我们就来到了’E的地址,以"%s"的形式输出,就得到了ER
第三个,cpp[-2] + 3,我们可以先变形一下,*、(cpp-2)+3。这样我们也许就一目了然了,cpp-2指向cp[0],解引用得到c[3]的地址,再解引用,得到‘f’的地址,随后加3,,以"%s"的形式输出,得到 st的结果。
第四个,cpp[-1][-1] + 1,我们依然可以变形一下,
(*(cpp-1)-1)+1;这一步可真不好变呢。cpp-1指向从cp[1];解引用得到c[2]地址,我们减一,随后解引用,我们 就得到了从’n’的地址,再加1,以"%s"的形式输出,得到ew的结果。

好了,以上就是指针的简单运用,it’s funning~

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值