【发布时间】:2014-06-30 21:19:07
【问题描述】:
使用 Visual Studio Express 2013。我以为我了解静态数组和动态数组,但以下内容让我感到困惑:
int* a = new int[3]; \\ dynamic array
int** pa = &a;
int b[3]; \\ static array
int** pb = &b; \\ error: cannot convert from 'int (*)[3]' to 'int **'
好的,所以我尝试int (*)[3] pb = &b;,但它甚至在语法上都不正确。本地窗口显示 pb 是 int[3],但 int[3]* pb = &b; 也不正确。
b 与 pa 具有相同的值对我来说似乎也很奇怪。如果我将声明 int b[3]; 替换为声明 + 初始化 int b[3] = {};,那么这种奇怪现象就会消失,所以它可能只是一个 VS 错误:
但我仍然无法获取静态数组的地址。如果我在即时窗口中输入&b,那么我得到的输出与我刚刚输入b 完全相同,与明显不同的'&a' 和'a' 相比,这又显得很奇怪:
【问题讨论】:
-
值得指出的是
pb的声明应该类似于int (*pb)[3] = &b;。您只是将标识符放在错误的位置。
标签: c++