一个简短的编程难题

Qui*_*tic -3 c c++

以下谜题的可能解释是什么:

#include <stdio.h>
int main(){
    static char *s[] = {"black","white","yellow","violet"};
    char *ptr[] = {s+3,s+2,s+1,s},***p;
    p = ptr;
    *++p;
    printf("%s",*--*++p + 3);
}
Run Code Online (Sandbox Code Playgroud)

输出.

Joh*_*itb 7

p = ptr;
Run Code Online (Sandbox Code Playgroud)

这不是一个难题.这是一段无效的代码,因为它分配了char**一个char***.实际上问题发生在数组声明中

s+3有类型char**,但你声明ptr为数组char*.