我有一个变量定义 int (**ff)[4];
,它看起来很糟糕。如果我是对的(从 int (*f)[4];
是一个指向 4 个 int-s 的数组的指针这一事实推断出来的)这是一个指向指向一个数组的指针的指针4 个整数。
现在我尝试初始化这个东西,但我没有成功。初始化 f
很简单 (f = new int[5][4];
),但是行 ff = new int*[6][4];
不工作。 Microsoft Visual Studio Community 2013 在一条错误消息中指出
a value of type "int *(*)[4]" cannot be assigned to an entity of type "int (**)[4]"
我有一种很不好的预感,我真的误会了什么。
编辑:
抱歉,我没有明确说明:我想要的是不仅为一个指针分配内存空间,而且为更多指针分配内存空间,这些指针稍后可以指向一个由 4 个 int 组成的数组。当然,我希望在没有任何其他定义、转换等帮助的情况下将其写在一行中。
最佳答案
我可以(不)看到它仅以这种方式使用:
int (*a)[4] = new int[6][4];
int (**ff)[4] = &a;
int (**ff)[4]
的意思是“指向由四个 int
组成的数组的指针”。这意味着我们必须先有 int (*)[4]
- 一个左值,这样我们才能用 operator&
获取它的地址。
另一方面,new int*[6][4];
将一个指针数组分配给一个由四个指针组成的数组(“外部”数组衰减)。这与第一个完全不同。
我不得不自己动手 cdecl.org关于这个。
编辑:
我刚刚做了这个:
using PTR = int (*)[4];
int (**ff)[4] = new PTR; // hooray, a dynamically allocated pointer!
但是没有类型别名就想不出办法...
实际上,有一个:int (**ff)[4] = new (int (*)[4])
,收集自this Q&A .不要忘记,您现在拥有的只是一个动态分配的未初始化指针。
关于c++ - 指向数组指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35444501/