2

我去面试了。面试官给出了这个问题。看到这个问题后,我告诉他会出现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;
}
4

2 回答 2

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 -------------------------+
于 2013-08-15T06:16:49.447 回答
6

由于您只询问以下声明p

char **ptr[] = {s+3, s+2, s+1, s}, ***p;//Here

是相同的:

char **ptr[] = {s+3, s+2, s+1, s};
char ***p;
于 2013-08-15T05:56:22.777 回答