【问题标题】:How to print the array?如何打印数组?
【发布时间】:2012-04-01 09:15:10
【问题描述】:
int main() {  
  int my array[3][3] =
    10, 23, 42,    
    1, 654, 0,  
    40652, 22, 0  
  };  

  printf("%d\n", my_array[3][3]);  
  return 0;
}

我无法打印数组。有什么想法吗?我是一个初级程序员,所以任何建议都值得赞赏。

【问题讨论】:

  • 是否缺少某些代码?看起来您缺少数组上的左括号,以及 my_array 声明中的 _
  • 只是一个忠告:您应该指定您正在编码的语言,以便更好地确定合适的解决方案:)
  • 哦,您应该告诉我们您遇到的错误,因为该代码中有很多错误空间;)
  • 重要提示:数组索引从 0 开始。my_array[3][3] 正在尝试获取数组第 4 行中的第 4 个单元格。这张图有什么问题?

标签: c arrays printing multidimensional-array


【解决方案1】:

您正在做的是在点 [3][3] 处打印数组中的值,这对于 3by3 数组无效,您需要遍历所有点并打印它们。

for(int i = 0; i < 3; i++) {
    for(int j = 0; j < 3; j++) {
        printf("%d ", array[i][j]);
    }
    printf("\n");
} 

这将按以下格式打印

10 23 42
1 654 0
40652 22 0

如果您想要更精确的格式,则必须更改 printf 的格式。

【讨论】:

  • 如果你使用 C++ 编程,你也可以使用 cout 代替 printf
  • @trev9065 是的,但他使用了printf,并且在我回答时没有说明语言,所以我坚持使用printf
【解决方案2】:

您的数组似乎有错字,应该是:

int my_array[3][3] = {...

您没有_{

另外my_array[3][3] 是一个无效的位置。由于计算机从0 开始计数,因此您正在访问位置4。 (这样的数组很奇怪)。

如果你只想要最后一个元素:

printf("%d\n", my_array[2][2]);

如果你想要整个数组:

for(int i = 0; i < my_array.length; i++) {
  for(int j = 0; j < my_array[i].length; j++)
    printf("%d ", my_array[i][j]);
  printf("\n");
}

【讨论】:

    【解决方案3】:

    C 中没有 .length 属性。.length 属性只能应用于面向对象编程 (OOP) 语言中的数组。 .length 属性继承自对象类;所有其他类和对象都继承自 OOP 语言的类。此外,可以使用 .length-1 返回数组中最后一个索引的编号;仅使用 .length 将返回数组的总长度。

    我会建议这样的事情:

    int index;
    int jdex;
    for( index = 0; index < (sizeof( my_array ) / sizeof( my_array[0] )); index++){
       for( jdex = 0; jdex < (sizeof( my_array ) / sizeof( my_array[0] )); jdex++){
            printf( "%d", my_array[index][jdex] );
            printf( "\n" );
       }
    }
    

    行 (sizeof( my_array ) / sizeof( my_array[0] )) 将为您提供相关数组的大小。 sizeof 属性将返回以字节为单位的长度,因此必须将数组的总大小(以字节为单位)除以组成每个元素的字节数,每个元素占用 4 个字节,因为每个元素的类型分别为 int。该数组的总大小为 16 个字节,每个元素为 4 个字节,因此 16/4 产生 4 个数组中的元素总数,因为索引从 0 而不是 1 开始。

    【讨论】:

    • 如果数组不是方形的,这将不起作用,因为jdex 正在循环使用外部数组的大小而不是内部数组。
    【解决方案4】:

    你可以试试这个:

    #include <stdio.h>
    
    int main() 
    {  
      int i,j;
      int my_array[3][3] ={10, 23, 42, 1, 654, 0, 40652, 22, 0};
      for(i = 0; i < 3; i++) 
      {
           for(j = 0; j < 3; j++) 
           {
             printf("%d ", my_array[i][j]);
           }
        printf("\n");
      } 
      return 0;
    }
    

    【讨论】:

      【解决方案5】:

      如果你想像在 Python 中打印二维列表一样打印数组:

      #include <stdio.h>
      
      int main()
      {
        int i, j;
        int my_array[3][3] = {{10, 23, 42}, {1, 654, 0}, {40652, 22, 0}};
        for(i = 0; i < 3; i++)
        {
            if (i == 0) {
                printf("[");
            }
            printf("[");
            for(j = 0; j < 3; j++)
            {
               printf("%d", my_array[i][j]);
               if (j < 2) {
                   printf(", ");
               }
            }
          printf("]");
          if (i == 2) {
              printf("]");
          }
      
          if (i < 2) {
              printf(", ");
          }
        }
        return 0;
      }
      

      输出将是:

      [[10, 23, 42], [1, 654, 0], [40652, 22, 0]]
      

      【讨论】:

      • 有没有办法打印整个数组,而不仅仅是通过遍历它们来打印数组的内容?
      【解决方案6】:

      试试这个。只有几行代码。不要害怕指针(给初学者)。

      void PrintArray(uint8_t *data_arr, uint8_t data_length)
      {
          while (data_length--)
          {
              printf("0x%02x ", *data_arr);
              *data_arr++;
          }
          printf("\n");
      }
      

      根据您的用途更改 printf() 语句。 如果需要打印为char:

      printf("%c", (char)*data_arr);
      

      对于十进制值:

      printf("%d ", (uint8_t) *data_arr);
      

      【讨论】:

        猜你喜欢
        • 2018-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        • 1970-01-01
        • 2019-07-22
        • 2021-06-01
        相关资源
        最近更新 更多