一道面试题教你轻松玩转指针

提到指针,真是让人头皮发麻,今天笔者来带你玩转指针。

话不多说先看这道面试题 (注意细节)

int main()
{
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);
return 0;
}

 是不是看着看着就迷糊了,没关系,咱们画图来谈个究竟。

 这样一来看起来是不是明显多了,但还是要仔细分析才能保证万无一失。

第一次打印

先进行++p再进行两次解引用.见下图可知我们打印 POINT

 第二次打印

先进行 ++CPP    然后解引用  再进行 -- 操作将C+1改变为C  接着再一次解引用 最后+3

我们这里打印结果是 ER

 第三次打印

我们先进行CPP[-2]的操作,即相当于 *(CPP-2)但也要注意这里我们CPP的值并未发生改变

在这里我们(CPP-2)的指向用黑线表示,然后再一次解引用,最后+3,此时指向了图中ST

所以我们这里打印ST

 第四次打印

CPP[-1]即 *(CPP-1) 这里的CPP[-1][-1] 即相当于*( *(CPP-1)-1 ) 最后+1指向EW

 最后我们运行程序来看看结果

如果答对了,那么恭喜你,你已经把指针拿捏了。

如果没有答对,那么也不要气馁,再多看看分析,相信你一定行。

 最后可不可以给笔者来个一键三连呢,感谢各位老铁们啦。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谁家的攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值