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。
如果两者都“指向整数数组的指针" and "指向整数的指针“可以做同样的事情,他们有相同的内部表示吗?
编辑:这段代码在编译时确实会发出警告,如下面的答案所指出的,但是它确实在使用 gcc 的 x86_64 机器上正确打印了值
首先,您的代码将无法编译。数组有类型int[6]
(6 个元素),而指针有类型int (*)[5]
。您不能使此指针指向该数组,因为类型不同。
其次,当您初始化(分配给)这样的指针时,您必须使用&
在数组上:x = &y
,不只是简单的x = y
就像你的代码中一样。
我假设您只是输入代码,而不是复制粘贴真实的代码。
第三,关于内部代表性。一般来说,在实践中,您应该期望所有数据指针使用相同的内部表示。而且,在上述赋值之后(如果编写正确的话),指针将具有相同的数值。和...之间的不同int (*)[5]
and int *
仅存在于概念层面,即语言层面:类型不同。它会产生一些后果。例如,如果您增加z
它将跳转到数组的下一个成员,但是如果您递增y
,它将跳过整个数组等。所以,这些指针并没有真正“做同样的事情”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)