如果不使用以下代码,如何初始化具有特定值的2D数组的整列,比如说1?
int a[row][col];
for(i=0; i<row; i++)
{
a[i][col]=1;
}
答案 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 ( a,1, sizeof(a));
答案 3 :(得分:-1)
你所拥有的对于一个专栏来说没问题。
如果要初始化整个数组:
for (i=0; i < sizeof(a)/sizeof(int) ; i++) {
a[i] = 1;
}
以上使用单循环计数器初始化数组a
。由于a
是int
类型而非char
的数组,因此您无法使用memset()