如何在C中初始化矩阵

how to initialize a matrix in C

我需要用空格在 C 中初始化一个 h x h 矩阵。

如何在没有循环的情况下正确地做到这一点?

int h = 8;
char arr[h][h] = {{' '}}; // does not work.... 

这些声明

int h = 8;
char arr[h][h] = {{' '}};

声明一个可变长度数组。可变长度数组只能在函数中声明(例如在 main 中),因为它们应具有自动存储持续时间并且可能不会在声明中初始化。

所以你可以这样写

#include <string.h>

//...

int main( void )
{
    int h = 8;
    char arr[h][h];

    memset( arr, ' ', h * h );
    //...
}

也就是说,您可以应用标准函数 memset,将数组的所有字符设置为 space 字符 ' '

即使你有一个非可变长度数组,仍然要用 space 字符初始化它的所有元素,最好使用函数 memset.

#include <string.h>

//...

int main( void )
{
    enum { h = 8 };
    char arr[h][h];

    memset( arr, ' ', h * h );
    //...
}

来自GNU site

To initialize a range of elements to the same value, write ‘[first ... last] = value’. This is a GNU extension

您可以使用指定的初始化器。但是这种类型的初始化有效,仅适用于 constant number of rows and columns.

char arr[8][8] = { { [0 ... 7] = ' '}, { [0 ... 7] = ' '}, { [0 ... 7] = ' '}, { [0 ... 7] = ' '}, { [0 ... 7] = ' '}, { [0 ... 7] = ' '}, { [0 ... 7] = ' '}, { [0 ... 7] = ' '}  };