c++c#JavaC语言代码

int main()
{
charc[]={"ENTER","NEW","POINT","FIRST"};
charcp[]={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;

}

百度搜“怪异代码大赛”

【以下回答由 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;
}

下面是对每个打印语句的详细解释:

  1. printf("%s\n", **++cpp); 先对cpp进行自增,使其指向c+2,再对其进行间接引用两次,即得到c+2指向的字符串"NEW"。

  2. printf("%s\n", *--*++cpp+3);

  3. 先对cpp进行自增,使其指向c+1
  4. 然后对cpp进行间接引用,得到c+1指向的字符串"c"。
  5. 接着对获取到的字符串进行自减,得到"ENT"。
  6. 最后加上3,得到"ENT3"。

  7. printf("%s\n", *cpp[-2]+3); cpp的下一行的倒数第二个元素是c+2,对其进行间接引用得到"POINT",再加上3,得到"INT"。

  8. printf("%s\n", cpp[-1][-1]+1); cpp的下一行的倒数第一个元素是c+3,对其进行间接引用得到"F",再加上1,得到"G"。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^