1

当我试图用括号强调指针数组的声明时,我发现了一个令人费解的数组,如(int *) ptr[N];.

GCC C 编译器说:

error: ptr undeclared (first use in this function).

任何人都可以解释错误的起源吗?

4

4 回答 4

3

很简单:变量ptr还没有被声明。不,不是(int *) ptr[N];声明,它是数组下标表达式的类型转换。

如果你想要一个指针数组,你应该这样做

int *ptr[N];
于 2013-11-05T07:06:15.947 回答
2

它将数组的第N个元素ptr转换为整数指针。

错误本身指出ptr从未声明过。您忘记或删除了我的错误,如下所示:

int *ptr[123];

关于N它似乎是一个通常定义的常量,例如:

#define N 42
于 2013-11-05T07:06:18.027 回答
1

也许你可以这样做

typedefine int* INT_PTR;
INT_PTR ptr[N];
于 2013-11-05T07:08:52.183 回答
1

我认为编译器会将 ptr[N] 转换为类型(int *),就像

    int a;
    double b;
    b = (double)a;

所以 (int *)ptr[N] dosen 的值是左值,并且你之前从未声明过 ptr。然后 gcc 编译器会告诉你 ptr 未声明。

于 2013-11-05T07:12:54.493 回答