int (*a)[5];
我们如何初始化一个指向上面所示的 5 个整数数组的指针。
下面的表述是否正确?
int (*a)[3]={11,2,3,5,6};
最佳答案
假设您有一个长度为 5
的 int 数组,例如
int x[5];
然后你可以做 a = &x;
int x[5] = {1};
int (*a)[5] = &x;
要访问数组元素,您:(*a)[i]
(== (*(&x))[i]
== (* &x)[i]
== x[i]
) 需要括号,因为 []
运算符的优先级高于 *
。 (一个常见的错误是使用 *a[i]
访问数组元素)。
理解你问的是编译时错误:
int (*a)[3] = {11, 2, 3, 5, 6};
这是不正确的,也是类型不匹配,因为 {11,2,3,5,6}
可以分配给 int a[5];
并且您正在分配给 int (*a)[3]
。
此外,
你可以为一维做一些事情:
int *why = (int p[2]) {1,2};
类似地,对于二维试试这个(感谢@caf):
int (*a)[5] = (int p[][5]){ { 1, 2, 3, 4, 5 } , { 6, 7, 8, 9, 10 } };
关于c - 初始化 "a pointer to an array of integers",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17850998/