以下代码有效,但我被告知它不能使用带有 Visual C++ 2010 的 gcc 3.4.2 进行编译,并且可能是非法的:
int ar1[]{0,1,2,3,4,5,6,7,8,9},
*ptr1 = ar1,
ar2[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18},
*ptr2 = ar2;
显然你需要做一些修改才能工作(类似的东西):
int ar1[]{0,1,2,3,4,5,6,7,8,9};
int *ptr1 = ar1;
int ar2[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18};
int *ptr2 = ar2;
是吗?数组和指针不能一起声明吗?
(代码在 QT + gcc 4.8 上编译良好)
最佳答案
有问题的声明使用 C++11 初始化语法。从 C++11 之前的编译器的角度来看,它在语法上是不正确的。但是,如果您在每个 {
之前添加一个 =
,它将成为普通且完全合法的 C++98 声明(以及 C 声明)。
在一个声明中使用多个声明符没有问题,即使混合使用指针和数组声明符也是如此。如果您愿意,可以将函数声明符添加到该组合中。唯一的限制是您不能在其中嵌入函数定义。
关于C++ 在同一行声明指针和数组是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626176/