【问题标题】:How to initialize N dimensional arrays in C without using loop如何在不使用循环的情况下在 C 中初始化 N 维数组
【发布时间】:2012-07-10 21:38:36
【问题描述】:

我想初始化一个 3 x 3 矩阵,前两行为 0,最后一行为 1。我已经声明了一个二维数组int matrix[3][3]

我想在不使用循环的情况下初始化它,如下所示

0 0 0
0 0 0
1 1 1

我也想要 N 维数组的解决方案

【问题讨论】:

    标签: c arrays matrix initialization


    【解决方案1】:

    对于常量整数表达式N(比如宏或enum 常量),您必须“展开”初始化程序。当N 扩展为十进制常量时,有一些宏技巧可以做到这一点,但它们有点复杂。 P99 提供了这样的宏,你可以写出来

    #define N 23
    
    int matrix[N][N] = {
        [N-1] = P99_DUPL(N, 1),
    };
    

    这使您可以在需要时轻松更改 N,而无需在代码中修改任何其他内容以进行更新。

    【讨论】:

      【解决方案2】:
      int matrix[3][3] = {
          { 0, 0, 0 },
          { 0, 0, 0 },
          { 1, 1, 1 }
      };
      

      或者,更紧凑:

      int matrix[3][3] = {
          [2] = { 1, 1, 1 }
      };
      

      只要N 是固定的,该解决方案就适用于N。如果N 很大,可以使用mouviciel 对this question 的回答。

      【讨论】:

      • 再次感谢,也在寻找N维解
      • @AndyStowAway 该解决方案适用于 N 维数组,只要 N 是编译时已知的固定数字。
      【解决方案3】:

      在你的情况下,你可以这样做

      int a[3][3] = {{}, {}, {1,1,1}}; 
      

      注意空大括号会自动填充0。

      现在,如果你愿意

      0 0 0
      0 0 0
      1 0 0
      

      你可以这样做:

      int a[3][3] = {{}, {}, {1,}};
      

      详情请看How to initialize all members of an array to the same value?(这里是一维数组,但会帮助你理解上面写的内容。)

      另外,http://c-faq.com/~scs/cclass/notes/sx4aa.html 是一个很好的数组初始化资源。

      【讨论】:

        【解决方案4】:
        matrix[0][2] = matrix[0][1] = matrix[0][0] =
        matrix[1][2] = matrix[1][1] = matrix[1][0] = 0;
        matrix[2][2] = matrix[2][1] = matrix[2][0] = 1;
        

        #include <string.h>
        ...
        memset(matrix, 0, sizeof(matrix));
        matrix[2][2] = matrix[2][1] = matrix[2][0] = 1;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-11
          • 2014-05-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多