在 C 中初始化一整列二维数组
Posted
技术标签:
【中文标题】在 C 中初始化一整列二维数组【英文标题】:Initializing an entire column of 2D-array in C 【发布时间】:2015-01-16 15:13:42 【问题描述】:如果不使用以下代码,如何使用特定值(例如 1)初始化 2D 数组的整个列?
int a[row][col];
for(i=0; i<row; i++)
a[i][col]=1;
【问题讨论】:
int a[n]= 1
只会将第一个元素初始化为1
,其余的将初始化为0
int a[col][row];
然后在循环中a[col][i] = 1
怎么样。对我来说似乎有效。你甚至可以使用memset
。不过,并不是说它在内部不使用循环。
@rullof 是的,你是对的人,有没有办法用任何特定值初始化一维数组,只需一行代码??
TDM-GCC 编译器,版本 4.8.1 @2501
那么我的答案完全符合您的需求,我猜您正在使用 GCC 编译器! @SubhankarPaul
【参考方案1】:
从 15 年前标准化的 C99 开始,您可以使用显式索引:
int a[10][10] = [0][0] = 1, [1][0] = 1, /* more code here */, [9][0] = 1 ;
使用 GCC,您可以使用更强大的语法,但当然会失去可移植性,并且不再使用标准 C 进行编程。
【讨论】:
感谢您的回答,但我只需要 C 语言的解决方案 @SubhankarPaul C99 甚至不是 C 的最新标准化版本,它已有 15 年的历史。 C11 是最新的。 @unwind C 2003 和 C11 怎么样? @rullof Gaah,你说得对,我倾向于忘记 C11。 :) 谢谢,已修复。 我如何知道我使用的是哪个版本的 C @unwind ??【参考方案2】:C99 和更高版本将允许您使用指示符初始化整个行/列。但是您不能在不使用循环的情况下分配 1
到整个列。
int a[n]= 1;
会将数组的第一个元素初始化为1
,其余元素将默认初始化为0
。它没有将所有元素初始化为1
。这些是您需要循环的 C 语言区域。
【讨论】:
至少从 C99 开始不正确。【参考方案3】:如果你想用相同的数字初始化二维数组的所有元素,你可以按照 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));
【讨论】:
这是一个扩展,不是吗? 什么?从什么时候开始在 C 中允许使用int a[5][6]= [0 ... 4][0 ... 5]=1;
?
范围表示法不只是 GCC 吗?
感谢您和所有为回答您的问题做出贡献的人,这实际上让事情变得更加清晰!喜欢 2501 黑客和放松!!!
但是@meninx 根据我的问题,我只需要修复数组的一列,我如何使用memset
函数来做到这一点??【参考方案4】:
你所拥有的对于一个专栏来说是很好的。
如果要初始化整个数组,请使用:
for (i=0; i < sizeof(a)/sizeof(int) ; i++)
a[i] = 1;
上面使用单个循环计数器初始化数组a
。由于a
是int
类型的数组而不是char
,所以不能使用memset()
【讨论】:
以上是关于在 C 中初始化一整列二维数组的主要内容,如果未能解决你的问题,请参考以下文章
在C语言中定义二维数组long a[3][5],则数组占多少字节的存储空间?