为什么这个程序没有抛出任何错误?

Ras*_*yak 2 c++ pointers

我去采访了.采访者提出了这个问题.在看到这个问题之后,我告诉他将会有一个p未声明的错误.但是当我在我的电脑上运行该程序时,我对答案/输出感到惊讶,因为ink它也没有任何错误.请帮我理解这个问题.

#include <iostream>
using namespace std;
int main()
{
    static char *s[] = {"black", "white", "pink", "violet"};
    char **ptr[] = {s+3, s+2, s+1, s}, ***p;//Here
    p = ptr;
    ++p;
    cout << **p+1;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

P0W*_*P0W 8

这个怎么样 :-

static char *s[] = {"black", "white", "pink", "violet"};
                     ^        ^        ^       ^
                     |        |        |       |
                     |        |        |       |
                     |        |        |       |
                     +------------+    |       |
                          +---|---|----+       |
                          |   |   |            |
                     + ---|---|---|------------+
                     |    |   |   |
    char **ptr[] = {s+3, s+2, s+1,s};
                     ^    ^
    char ***p;       |    |
                     |    |
    p=ptr ;  --------+    |
                          |
    ++p; -----------------+  {'p','i','n','k'}
                                   ^
    **p+1 -------------------------+
Run Code Online (Sandbox Code Playgroud)


Yu *_*Hao 6

因为您只询问以下声明p:

char **ptr[] = {s+3, s+2, s+1, s}, ***p;//Here
Run Code Online (Sandbox Code Playgroud)

是相同的:

char **ptr[] = {s+3, s+2, s+1, s};
char ***p;
Run Code Online (Sandbox Code Playgroud)