在 C 中初始化整个二维数组列

Initializing an entire column of 2D-array in C

在不使用以下代码的情况下,如何使用特定值(比如 1)初始化二维数组的整个列?

int a[row][col];
for(i=0; i<row; i++)
{
   a[i][col]=1;
}

从 15 年前标准化的 C99 开始,您可以使用显式索引:

int a[10][10] = { [0][0] = 1, [1][0] = 1, /* more code here */, [9][0] = 1 };

使用 GCC,您可以使用更强大的语法,但当然您会失去可移植性并且不再使用标准 C 进行编程。

C99 和后者将允许您使用指示符初始化 整个row/column。但是你不能在不使用循环的情况下将 分配 1 到整个列。

默认情况下,

int a[n]= {1}; 会将数组的第一个元素初始化为 1,其余元素将初始化为 0。它没有将所有元素初始化为 1。这些是您需要循环的 C 区域。

如果你想用相同的数字初始化二维数组的所有元素,你可以通过 gcc 提供的一个好的数组初始化快捷方式来继续,例如:

int a[5][6]={ [0 ... 4][0 ... 5]=1};

要查看效果我们可以使用循环

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

生成矩阵

1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1

还有另一种可能性,使用 memset() 但它仅限于类型 char (-128 ... 127 ) 或 unsigned char (范围在 0 ... 255 之间)

如果您确定数组的值在任何情况下都不会超过限制,那么您可以通过这样定义数组来使用它

 char a[row][column];

并用string.h库中的memset函数初始化

memset ( a,1, sizeof(a));

你所拥有的足以作为一个专栏。

如果你想初始化整个数组使用:

for (i=0; i < sizeof(a)/sizeof(int) ; i++) {
    a[i] = 1;
}

以上使用单个循环计数器初始化数组 a。由于 a 是类型 int 而不是 char 的数组,您不能使用 memset()