【问题标题】:What does the declaration '(int *) ptr[N]' mean in C?C 中的声明 '(int *) ptr[N]' 是什么意思?
【发布时间】:2013-11-05 07:04:22
【问题描述】:
当我试图用括号强调指针数组的声明时,我发现了一个令人费解的数组,如(int *) ptr[N];。
GCC C 编译器说:
error: ptr undeclared (first use in this function).
谁能解释一下错误的来源?
【问题讨论】:
标签:
c
arrays
pointers
declaration
【解决方案1】:
很简单:变量ptr 还没有被声明。不,(int *) ptr[N]; 不是声明,它是数组下标表达式的类型转换。
如果你想要一个指针数组,你应该这样做
int *ptr[N];
【解决方案2】:
它将数组ptr的第N个元素转换为整数指针。
错误本身表明ptr 从未被声明。你忘记或删除了我的错误这样一行:
int *ptr[123];
关于N,它似乎是一个通常定义的常量,例如像这样:
#define N 42
【解决方案3】:
我认为编译器会将 ptr[N] 转换为类型 (int *),就像
int a;
double b;
b = (double)a;
所以 (int *)ptr[N] 剂量有左值,并且你之前从未声明过 ptr。
然后 gcc 编译器会告诉你 ptr 未声明。
【解决方案4】:
也许你可以这样做
typedefine int* INT_PTR;
INT_PTR ptr[N];