【问题标题】:Initializing an entire column of 2D-array in C在 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

标签: c initialization multidimensional-array


【解决方案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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多