Eri*_*ans 0 c multidimensional-array
#include <stdio.h>
int main(int argc, char **argv) {
int x[5][5] = {{0,1,2,3,4},{5,6,7,8,9}};
for (int i = 0; i < 4; i++) {
for (int j = 0; i < 4; i++) {
printf("%d\n", x[i][j]); } }
return 0; }
Run Code Online (Sandbox Code Playgroud)
这本来应该给我:0 1 2 3 4 5 6 7 8 9
结果是:0 5 0 0
然后,当我将它们改为chars时:
#include <stdio.h>
int main(int argc, char **argv) {
char x[5][5] = {{'0','1','2','3','4'},{'5','6','7','8','9'}};
for (int i = 0; i < 4; i++) {
for (int j = 0; i < 4; i++) {
printf("%d\n", x[i][j]); } }
return 0; }
Run Code Online (Sandbox Code Playgroud)
我得到48 53 0 0.
为什么?代码对我来说非常清楚,但似乎在背景上发生了一些模糊的东西(或者我的大脑以非常"pythonic"的方式工作......)
就像@Keith Thompson所说,你没有初始化所有25个元素.所以剩下的元素被初始化为0.因此,数据将以这种方式存储:
0 | 1 | 2 | 3 | 4 // Row 0
5 | 6 | 7 | 8 | 9 // Row 1
0 | 0 | 0 | 0 | 0 // Row 2
0 | 0 | 0 | 0 | 0 // Row 3
0 | 0 | 0 | 0 | 0 // Row 4
Run Code Online (Sandbox Code Playgroud)
您只初始化了数组的前两行.这就是你得到0 5 0 0输出的原因.
要获得正确的输出,您需要遍历数组的前两行.
第一
你需要改变你的第一个for循环:
for (int i = 0; i < 4; i++)
Run Code Online (Sandbox Code Playgroud)
至
for (int i = 0; i < 2; i++)
Run Code Online (Sandbox Code Playgroud)
原因:因为您只想循环前两行(第0行和第1行).
第二
您需要更改第二个for循环:
for (int j = 0; i < 4; i++)
Run Code Online (Sandbox Code Playgroud)
至:
for (int j = 0; j < 5; j++)
Run Code Online (Sandbox Code Playgroud)
原因:您j的循环条件需要变量,而不是i.你还需要改变4为5; 因为在数组中,索引从0开始.因此,每列的索引0,1,2,3,4分别为.
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 5; j++)
{
printf("%d\n", x[i][j]);
}
}
Run Code Online (Sandbox Code Playgroud)
此外,当您要更改时char x[5][5],您需要使用%c,来打印字符,而不是%d.
此外,你得到奇怪数字的原因是48因为当你打印一个charwith时%d,你实际上是打印它的ASCII值.参考下面的ASCII表,数字48代表字符'0'.
来自http://www.asciitable.com/的图片