大厂笔试指针习题你掌握了吗?!!

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;
}




答案:POINT   ER   ST    EW

解析:

我们逐行分析代码的含义:

  1. char *c[] = {"ENTER","NEW","POINT","FIRST"};:定义了一个字符串指针数组c,其中包含了4个字符串常量。
  2. char**cp[] = {c+3,c+2,c+1,c};:定义了一个指向指针的指针数组cp,其中包含了4个指针,指向数组c中的不同元素。
  3. char***cpp = cp;:定义了一个指向指针的指针的指针变量cpp,指向数组cp的首元素。
  4. printf("%s\n", **++cpp);:打印cpp指向的指针的指针所指向的字符串,输出为POINT++cpp会使cpp指向数组cp的下一个元素,即cp[1]**++cpp解引用两次指针,相当于*(*(cpp+1)),得到"POINT"
  5. printf("%s\n", *--*++cpp+3);:打印cpp指向的指针的指针所指向的字符串,经过一系列的指针运算,输出为ER++cpp会使cpp指向数组cp的下一个元素,即cp[2]*++cpp解引用一次指针,得到c+1,即指向字符串"NEW"的指针。--*++cpp先解引用指针,再对指针进行递减操作,相当于*(--(*(cpp+2))),得到c+1-1,即指向字符串"NEW"的指针,再加上3,得到字符串"ER"
  6. printf("%s\n", *cpp[-2]+3);:打印cpp指向的指针的指针所指向的字符串,输出为STcpp[-2]相当于*(cpp-2),即cp[0],解引用后得到c+3,即指向字符串"FIRST"的指针,再加上3,得到字符串"ST"
  7. printf("%s\n", cpp[-1][-1]+1);:打印cpp指向的指针的指针所指向的字符串,输出为EWcpp[-1]相当于*(cpp-1),即cp[3],解引用后得到c,即指向字符串"ENTER"的指针,再进行[-1]操作,得到字符串"EW"
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

向前进.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值