金山笔试题解析
程序员文章站
2024-03-15 20:17:00
...
代码:
#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
结果:
优先级:后缀自增>后缀自减>前缀自增>前缀自减>间接访问
上一篇: springboot入門(一) helloworld
下一篇: 在有序旋转数组中找到最小值