【问题标题】:Initialise a 2D array all to the same value?将一个二维数组初始化为相同的值?
【发布时间】:2013-03-30 07:04:18
【问题描述】:

我想知道是否可以在 C 中将 2D 数组的每个元素初始化为相同的值。我这样声明我的二维数组:

char arry[x][y];

并且我希望每个元素 arry[0...x][0...y] 都包含星号字符。有没有简单的方法可以在没有循环的情况下做到这一点?我在想这样的事情:

char arry[x][y] = '*'

但我知道那行不通。

【问题讨论】:

  • 提示:使用memset。它不会初始化数组,而是在一个语句中将所有成员设置为所需的值,我相信这就是您想要的。
  • 为什么要避免循环。没有循环就很难编程。
  • @AlokSave memset 使用循环。

标签: c arrays


【解决方案1】:

你可以使用scalar initializer:

// Define row and column
int row = 4, col = 5;
// Initialize 2D character array
char array2D[row][col] = {[0 ... (row-1)][0 ... (col-1)] = '*'};

// Print array to screen
printf("\nArray:\n");

for(int x = 0; x < row; x++)
{
    for(int y = 0; y < col; y++)
        printf("%c\t", array2D[x][y]);
    printf("\n");
}

你可以看到那个输出:

Array:
*   *   *   *   *   
*   *   *   *   *   
*   *   *   *   *   
*   *   *   *   *   

【讨论】:

    【解决方案2】:

    只要“相同的值”为零就可以

    char arry[x][y] = { 0 };
    

    上面将用零初始化数组的所有元素。

    对于任何其他值,通过初始化语法是不可能的(除非您想为每个数组元素显式拼写“相同的值”)。您将编写自己的初始化周期或使用预先编写的函数。

    【讨论】:

    • OP 专门说一个特定的值,即*
    • @Alok Save:'*'char 作为数组元素类型只是一个示例。 OP说“例如”。问题本身并没有谈论* 和/或char。所以,memset 并不是真正的正确答案。
    • 抱歉,我可能不太清楚。我确实想将整个东西初始化为*
    • @rheotron:太好了。答案仍然存在:没有办法。 memset 会有点“工作”(“预先编写的功能”),但无论如何这将是一个黑客。委婉地说,用memset 滚压二维数组并不是一个非常优雅的解决方案。当然memset 是一个相当隐蔽的循环,你想在没有循环的情况下做到这一点。
    • 是的——我就是这么想的。这是一个相当简单的程序,我想让它尽可能优雅。使用您上面提供的代码,我收到错误variable-sized objects may not be initialized
    猜你喜欢
    • 1970-01-01
    • 2016-12-09
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    相关资源
    最近更新 更多