int main()
{
charc[]={"ENTER","NEW","POINT","FIRST"};
charcp[]={c+3,c+2,c+1,c};
charcpp=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;
}
百度搜“怪异代码大赛”
【以下回答由 GPT 生成】
答案如下:
int main()
{
char c[] = {"ENTER","NEW","POINT","FIRST"};
char *cp[] = {c+3, c+2, c+1, c}; // 声明一个指针数组cp,并将c中的元素的地址存储到这个数组中
char **cpp = cp; // 声明一个指向指针数组cp的指针cpp
printf("%s\n", **++cpp); // 打印cpp的下一行中的内容:"NEW"
printf("%s\n", *--*++cpp+3); // cpp先自增,再对自增后的指针进行间接引用,再对引用的指针进行自减。所以cpp现在指向c+1,再对其进行间接引用得到"c",再对"c"进行自减,得到"ENT",最后加上3,得到"ENT3"
printf("%s\n", *cpp[-2]+3); // cpp的下一行的倒数第二个元素是c+2,对其进行间接引用得到"POINT",再加上3,得到"INT"
printf("%s\n", cpp[-1][-1]+1); // cpp的下一行的倒数第一个元素是c+3,对其进行间接引用得到"F",再加上1,得到"G"
return 0;
}
下面是对每个打印语句的详细解释:
printf("%s\n", **++cpp);
先对cpp进行自增,使其指向c+2
,再对其进行间接引用两次,即得到c+2
指向的字符串"NEW"。
printf("%s\n", *--*++cpp+3);
c+1
。c+1
指向的字符串"c"。最后加上3,得到"ENT3"。
printf("%s\n", *cpp[-2]+3);
cpp的下一行的倒数第二个元素是c+2
,对其进行间接引用得到"POINT",再加上3,得到"INT"。
printf("%s\n", cpp[-1][-1]+1);
cpp的下一行的倒数第一个元素是c+3
,对其进行间接引用得到"F",再加上1,得到"G"。