无法在 C 中初始化指针数组
Failed to initialize a pointer array in C
int array[2] = {1, 1};
int (*pointer_array)[2] = {NULL, NULL};
第一行可以正确编译,第二行不能?为什么?
GCC编译器会弹出警告,excess elements in scalar initializer
.
如何在 C 中初始化指针数组?
已编辑
我以错误的方式声明了一个指针数组。
应该是这样的:
int *pointer_array[2] = {NULL, NULL};
假设你有一个长度为 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[2]) {1,2};
类似地,对于二维试试这个(感谢@caf):
int (*a)[5] = (int [][5]){ { 1, 2, 3, 4, 5 } , { 6, 7, 8, 9, 10 } };
应该是
int (*pointer_array)[2]=(int[]){1,2};
这是指向 int
数组的指针。我不知道您想要指向 int
数组或指针数组的指针。
要声明为指针数组,您需要这样做 -
int *pointer_array[2];
int array[2] = {1, 1};
int (*pointer_array)[2] = {NULL, NULL};
第一行可以正确编译,第二行不能?为什么?
GCC编译器会弹出警告,excess elements in scalar initializer
.
如何在 C 中初始化指针数组?
已编辑
我以错误的方式声明了一个指针数组。
应该是这样的:
int *pointer_array[2] = {NULL, NULL};
假设你有一个长度为 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[2]) {1,2};
类似地,对于二维试试这个(感谢@caf):
int (*a)[5] = (int [][5]){ { 1, 2, 3, 4, 5 } , { 6, 7, 8, 9, 10 } };
应该是
int (*pointer_array)[2]=(int[]){1,2};
这是指向 int
数组的指针。我不知道您想要指向 int
数组或指针数组的指针。
要声明为指针数组,您需要这样做 -
int *pointer_array[2];