微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这些指针之间的区别

如何解决这些指针之间的区别

我写了这个C代码

int A[2][3] = {{1,2,3},{4,5,6}};
int *P[3] = A;

给出错误。但是当我像这样修改指针

int (*P)[3] = A;

代码会编译。这两个指针有什么区别

解决方法

此声明

int *

不声明指针。它声明了一个int * ( P[3] ) 类型的三个元素组成的数组。

您甚至可以通过以下方式重写该数组的声明

int (*P)[3]

但是,除了可以使用字符串文字初始化字符数组之外,甚至不能使用相同类型的另一个数组初始化一个数组。

此声明

int[3]

的确声明了一个指向数组类型int (*P)[3] = A; 的对象的指针。另一方面,此声明中使用的初始化程序

int[2][3]

并且类型为int ( * )[3]的指针将隐式转换为指向类型为{1,2,3}的第一个元素(即数组int ( * )[3])的指针。因此,声明的对象和初始化表达式具有相同的类型renv.lock

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。