“指向 int 的指针”和“指向 int 数组的指针”之间的区别

2024-01-10

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(使用前将#替换为@)

“指向 int 的指针”和“指向 int 数组的指针”之间的区别 的相关文章

随机推荐