笔试题讲解(C语言进阶)

目录

前言

1、题目

2、答案

3、解析

结语


前言

        “纸上得来终觉浅,绝知此事要躬行”。本篇通过对指针实际案例的分析,由浅入深,来加强我们对指针的理解。

1、题目

        这是一道难题,小心哦。

#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);  
	printf("%s\n", *-- * ++cpp + 3);
	printf("%s\n", *cpp[-2] + 3);
	printf("%s\n", cpp[-1][-1] + 1);
	return 0;
}

       这里先附上操作符优先级,这个是要记住的:

        请通过自己的方法解出此题,后面公布答案,对比一下。

2、答案

        

        答案为:POINT        ER        ST        EW

        此题很难,涉及到很多细节上的知识点,如果能够搞懂的话,说明你对指针的了解已经到了一定高的境界。下面看解析。

3、解析

        上面是cpp   cp   c 之间的关系。

        对于  **++cpp;先对cpp+1指向下一个地址也就是cp中的第二个元素:c+2。然后对其经行两次解引用,第一次解引用得到c+2,第二次解引用得到c+2的指向的内容(c的第三个元素)POINT,于是打印出“POINT”。计算完后,现在的三个指针的情况如下:

        对于  *-- * ++cpp + 3; 先运算++cpp,因为在上面进行了一次++cpp运算,这是第二次++cpp,所以指向cp第三个元素c+1,然后解引用得到cp[2],此时再运算--,得到指向c的指针,并存放到cp[2]里面,cp[2]变成了指向c的指针。再解引用得到c,c指向"ENTER",c+3指向"ER",因此打印出来为"ER"。此次输出完成,三个指针情况如下:

        下面输出:*cpp[-2]+3;  首先cpp和[-2]结合,得到cp第一个元素,也就是c+3,然后解引用c+3得到指向"FIRST"的指针,再+3得到指向"ST"的指针,最后输出为"SE"。这次运算没有改变三个指针的指向。现在三个指针还是如下:

        最后分析:cpp[-1][-1] + 1;首先cpp[-1]结合得到c+2。然后再和[-1]结合得到c+1指向的内容"NEW"。最后,+1,指向"EW"。输出为"EW"。

结语

        本题讲解完毕,此题值得我们去细细琢磨,在这样的练习中提升我们对指针的理解。

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

彭逍遥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值