在 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。由于aint 类型的数组而不是char,所以不能使用memset()

【讨论】:

以上是关于在 C 中初始化一整列二维数组的主要内容,如果未能解决你的问题,请参考以下文章

在C语言中定义二维数组long a[3][5],则数组占多少字节的存储空间?

c语言二维数组 赋值

C 语言二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )

c语言二维数组如何初始化

C语言 写个给二维数组初始化的函数

C语言 指针初始化二维数组