声明后在C中使用初始化列表

时间:2016-10-31 15:56:02

标签: c arrays initialization declaration

我正在学习C,有些事情使我感到困惑,我读过的书并没有帮助澄清我的问题。

所以这是我的代码:

xargs

是否有一种方便的方法在声明后初始化此数组?或者设置#include <stdio.h> #include <stdlib.h> #define ARRAY_SIZE 5 // gcc -std=c99 stackoverflow-example.c int main () { // declare variable array1 int array1[ARRAY_SIZE]; // declare and init variable array2 int array2[ARRAY_SIZE] = {}; // for integers, the default value is 0 // not initialized for (int i = 0; i < ARRAY_SIZE; i++) { // can be anything, not guaranteed to be 0 printf("array1[%d]: %d\n", i, array1[i]); } // initialized with initialization list for (int i = 0; i < ARRAY_SIZE; i++) { // element == 0 printf("array2[%d]: %d\n", i, array2[i]); } // This is the part that confuses me. // array1 = {}; // error: expected expression before ‘{’ token // array1[] = {}; // same error return EXIT_SUCCESS; } 中每个元素的唯一方法是使用for循环,例如:

array1

我非常感谢你的帮助。我知道它有点像一个菜鸟问题,但它出现了,因为我试图更熟悉C语言并尝试了一些非书籍示例代码。

如果你怀疑,可能有一些基本的东西我没有得到,请告诉我,我会读到它。

1 个答案:

答案 0 :(得分:1)

从技术上讲,initialization只能在声明时间完成一次,存储之后的任何值都是分配或复制。

括号括起的初始化列表只能在声明时用于数组的初始化。

对于数组的单个元素(标量项),规则为:(引用C11,章节§6.7.9

  

标量的初始值设定项应为单个表达式,可选择用大括号括起来。

并且空列表{}不是标量的有效初始值设定项(表达式)。因此你得到了错误。

因此,对于已定义的数组,重新设置必须完成

  • 逐个成员,通过循环
  • 使用memcpy()memset(如果允许)。