我写了这个C代码
int A[2][3] = {{1, 2, 3}, {4, 5, 6}};
int *P[3] = A;
给出错误。但是当我像这样修改指针
int (*P)[3] = A;
代码会编译。这两个指针有什么区别
答案 0 :(得分:2)
此声明
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
。