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

标签 c++ pointers

我去面试了。面试官给出了这个问题。 看到这个问题,我告诉他会报错,因为p is undeclared。但是当我在我的 PC 上运行该程序时,令我惊讶的是 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;
}

最佳答案

这个怎么样:-

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 -------------------------+

关于c++ - 为什么这个程序没有抛出任何错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18247054/

相关文章:

c++ - 强制偏好 const 版本?

vector 元素上的 C++ 调用函数,派生自 vector 的基类

c - 使用 malloc 为其分配内存后如何加载结构?

java - 在Java中直接编辑JNI指针的内容

c++ - 具有尾随返回类型的通用 lambda 取决于 C++11 中的可变参数

c++ - 编译器在添加字符时停止优化未使用的字符串

c++ - 理解指针的使用

c++ - 初始化指针,c 和 c++ 编译器之间的区别 (gcc-4.3.4)

pointers - 在 golang 中具有指向 0 值的指针的深度复制结构

c++ - 指针 vector 与值 vector 对大内存块和小内存块的性能损失