C 多维数组打印提供了一些不同的功能

C 多维数组打印提供了一些不同的功能,c,multidimensional-array,C,Multidimensional Array,这应该给我:01 2 3 4 5 6 7 8 9 结果是:0500 然后,当我将它们更改为chars时: #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

这应该给我:01 2 3 4 5 6 7 8 9

结果是:0500

然后,当我将它们更改为chars时:

#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; }
我得到48 53 0


为什么??代码对我来说很清楚,但似乎在背景中发生了一些模糊的事情,或者我的大脑以一种非常类似蟒蛇的方式工作…

就像@Keith Thompson说的,你没有初始化所有25个元素。因此,其余元素被初始化为0。因此,数据将以以下方式存储:

#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; }
您只初始化了数组的前两行。这就是为什么您将0 5 0 0作为输出的原因

要获得正确的输出,需要循环遍历数组的前两行

解决此问题的步骤: 首先

您需要将第一个for循环更改为:

  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
for (int i = 0; i < 2; i++)
此外,当您更改为char x[5][5]时,您需要使用%c来打印字符,而不是%d

此外,您之所以会得到像48这样的奇怪数字,是因为当您打印带有%d的字符时,实际上是在打印它的值。参考下面的ASCII表,数字48表示字符“0”

来自


我不知道为什么你只初始化了2个一维数组。但是更改for循环中的边界应该满足您的需要

首先,您有两组五个数字和三组五个零。我不知道这是否是你想要的。在C'0',1',中。。。是数字值为48、49的字符…为什么您希望10个数字打印在一个执行5×5=25次的循环中?为什么您在两个循环中使用相同的索引i?为什么您测试<4而它应该<5?是的,数组是5乘5,因为他是这样定义的。这里只是没有显式初始化所有25个元素;剩下的15个元素隐式初始化为0;而有些实现使用。
for (int i = 0; i < 2; i++)
for (int j = 0; i < 4; i++)
for (int j = 0; j < 5; j++)
for (int i = 0; i < 2; i++) 
{
    for (int j = 0; j < 5; j++) 
    {
        printf("%d\n", x[i][j]); 
    } 
}
for(i = 0 ; i < 2 ; i++)
for(j = 0 ; j < 5 ; j++)
printf("%d\n",x[i][j]);