在C中初始化整列2D数组

时间:2015-01-16 15:13:43

标签: c initialization multidimensional-array

如果不使用以下代码,如何初始化具有特定值的2D数组的整列,比如说1?

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

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

C99和后者将允许您使用指示符初始化整个行/列。但是,如果不使用循环,则无法 1分配给整个列。

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

答案 2 :(得分:-1)

如果你想用相同的数字初始化2D数组的所有元素,你可以通过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));

答案 3 :(得分:-1)

你所拥有的对于一个专栏来说没问题。

如果要初始化整个数组:

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

以上使用单循环计数器初始化数组a。由于aint类型而非char的数组,因此您无法使用memset()