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

时间:2013-08-15 05:53:31

标签: 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;
}

2 个答案:

答案 0 :(得分: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 -------------------------+

答案 1 :(得分:6)

因为您只询问p

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

与:

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