【发布时间】:2009-05-01 19:45:39
【问题描述】:
作为一个 C 新手,我对二维数组有点困惑。
如果我想表示一个3行5列的矩阵,我猜正确的声明是:
char a[3][5];
那么,这是一个包含 3 个指向 5 个字符数组的指针的数组还是什么?
为什么每当我尝试像下面这样循环遍历它时,它似乎读取了错误的结果?
int x, y;
for( x=0; x<3; x++ ){
for( y=0; y<3; y++ ){
printf( "%c", a[x][y] );
}
}
以下是等价且正确的初始化方式吗?
char a[3][5] = {
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
};
char a[3][5] = {1,0,0,0,1,
1,0,0,0,1,
1,0,0,0,1};
感谢您最终的解释。
编辑
对不起,错别字,代码没有复制。顺便说一句,我一直让它们像垂直阅读一样阅读,而不是水平阅读。
同样在本教程http://www.cplusplus.com/doc/tutorial/arrays/ 的示例中,它以一种对我来说并不直接的方式读取数组,因为它似乎适用于 5x3、高度宽度、yx、 colsrows 结构,而不是 3x5、WidthHeight、xy。行第一列:
#define WIDTH 5
#define HEIGHT 3
int jimmy [HEIGHT][WIDTH];
int n,m;
int main ()
{
for (n=0;n<HEIGHT;n++)
for (m=0;m<WIDTH;m++)
{
jimmy[n][m]=(n+1)*(m+1);
}
return 0;
}
【问题讨论】:
-
您的嵌套 fors 应该在内循环中使用 y...这可能会解释错误的结果;]
-
顺便说一下,初始化数组的两种方法都是正确的。第二个使用大括号省略-但这当然是允许的。第一个使用尾随逗号,但也允许使用。就个人而言,我最喜欢带大括号且不带逗号的版本 - 但这只是我的口味。