为什么g ++会出错:在初始化时无法将'int(*)[3]'转换为'int(*)[]'

时间:2013-07-02 18:33:57

标签: c++ arrays pointers

当我尝试使用g ++编译以下代码时:

int main()
{
    int a[3] = {0, 1, 2};
    int (* p)[] = &a;
}

编译器给出以下错误:“无法在初始化中将'int()[3]'转换为'int()[]'。 为什么不能将int()[3]转换为int()[]? 如果不可能,那么应该如何初始化'int(*)[]'类型的变量?

3 个答案:

答案 0 :(得分:7)

因为您必须指定指针所指向的数组的长度。 它应该是这样的:

int (* p)[3] = &a;

int (*p)[]这意味着您的p是指向数组的指针。问题是编译器必须在编译时知道指针指向的数组有多长,所以你必须在括号中指定一个值 - > int (*p)[x]其中x 在编译时已知。

答案 1 :(得分:4)

有很多方法可以初始化int (*)[]类型的变量。例如,它可以由int (*)[]类型的其他值(包括由显式强制转换生成的值)或空指针常量初始化。 int (*)[3]值不会立即生效,因为它具有不同的类型。

在你的情况下,我希望这是完全合法和定义的

 int (*p)[] = (int (*)[]) &a;

进一步访问afray (*p)[i]

答案 2 :(得分:-1)

您可以执行以下操作(例如,使用p[0]p[1]p[2]访问每个元素):

int *p = a;

除非你真的想要指针指针,否则请使用:

int **p = &a;