【发布时间】:2010-03-07 20:18:04
【问题描述】:
int main()
{
int (*x)[5]; //pointer to an array of integers
int y[6] = {1,2,3,4,5,6}; //array of integers
int *z; //pointer to integer
z = y;
for(int i=0;i<6;i++)
printf("%d ",z[i]);
x = y;
for(int i=0;i<6;i++)
printf("%d ",(*x)[i]);
return 0;
}
以上 printfs 都打印数字 1 到 6。
如果“指向整数数组的指针”和“指向整数的指针”都可以做同样的事情,那么它们的内部表示是否相同?
编辑:此代码在编译时确实会发出警告,如下面的答案所指出的那样,但是它确实在我的 x86_64 机器上使用 gcc 正确打印值
【问题讨论】:
-
这个问题让我大吃一惊。我想我会永远避免 int (*x)[] 样式声明。
-
@Sandip:代码编译是因为在默认模式下 GCC 错误检测过于松散。它将违反约束报告为警告。您的
x = y分配确实是一个错误。
标签: c