我可以像这样声明整数数组的数组:
int dataA[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
并分别以这两种方式打印出阵列:
#include <stdio.h>
int main() {
int dataA[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int i = 0;
for (; i < 3; i++) {
int j = 0;
for (; j < 3; j++)
printf("%i,", dataA[i][j]);
printf(";");
}
puts("");
int dataB[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int *p = (int *) dataB;
int m = 0;
for (; m < 3; m++) {
int n = 0;
for (; n < 3; n++)
printf("%i,", *p + ((m * 3) + n));
printf(";");
}
return 0;
}
如果我以这种方式声明(这个声明是对的吗?),如何以这种方式打印出来怎么样?
#include <stdio.h>
int main() {
puts("");
int *dataC[3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
/*
* How to print out the array in this situation?
*/
puts("");
int x[] = { 1, 2, 3 };
int y[] = { 4, 5, 6 };
int z[] = { 7, 8, 9 };
int *dataD[3] = { &x, &y, &z };
/*
* How to print out the array in this situation?
*/
return 0;
}
答案 0 :(得分:3)
dataC
无法以这种方式初始化。 dataC
的元素属于int *
类型,而您使用int []
初始化它们。
正如@WhozCraig评论的那样,如果您这样做,它将是一个有效的初始化:
int *dataC[3] = {(int []){1, 2, 3}, (int []){4, 5, 6}, (int []){7, 8, 9}};
您可以使用与dataA
相同的方法输出数组。
dataD
也不能以这种方式初始化。 dataD
的元素属于int *
类型。 x
,y
和z
可以转换为int *
类型,但您对&
运算符的使用不正确 - &x
键入int **
,而不是int *
。
如果您这样做,那将是一个有效的初始化:
int *dataD[3] = { x, y, z };
如果是这种情况,您只需使用与dataA
相同的方法输出此数组。