金山笔试题解析

代码:
#include<stdio.h>
#include<stdlib.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);
    system("pause");
    return 0;
}


解析:
优先级:后缀自增>后缀自减>前缀自增>前缀自减>间接访问

char ***cpp = cp;
    把数组cp的首元素地址赋给了三级指针cpp

printf("%s\n", **++cpp);
     ++cpp——cpp就指向第二个char***++cpp访问到第二个char**的空间,
     **++cpp访问到char*的空间,即得到char*空间的内容————字符串“POINT"首元素的地址,所以输出————POINT.

printf("%s\n", *--*++cpp+3);
     ++cpp使cpp指向第三个char***++cpp访问到第三个char**的空间,而第三个char**指向第二个char*,
     --*++cpp使得访问到第一个char*,在对它解引用(*--*++cpp),获得第一个char*空间的内容——字符串“ENTER”首元素的地址,*--*++cpp+3,使得输出————ER

printf("%s\n", *cpp[-2]+3);
     *cpp[-2]=**(cpp-2)。
     cpp-2使得访问到第一个char**,但是,cpp得自身(指向)没有变,还是指向第三个char***(cpp-2)访问到第一个char**的空间,而第一个char**指向最后一个char*,
     **(cpp-2)访问到char*的空间,得到char*空间的内容————字符串“FIRST"首元素的地址,*cpp[-2]+3,使得输出————ST

printf("%s\n", cpp[-1][-1]+1);
     cpp[-1]=*(cpp-1)。
     cpp-1使得访问到第二个char**,
     cpp[-1],访问到第二个char**的空间,而第二个char**指向第三个char*,
     cpp[-1][-1]访问到第二个char*的空间,并得到它的内容————字符串“NEW”首元素的地址,cpp[-1][-1]+1,使得输出————EW

结果:
这里写图片描述

这里写图片描述
优先级:后缀自增>后缀自减>前缀自增>前缀自减>间接访问

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值