【发布时间】:2016-10-31 15:56:01
【问题描述】:
我正在学习 C,有些事情让我感到困惑,我读过的书并没有真正帮助澄清我遇到的问题。
所以这是我的代码:
#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;
}
有没有一种方便的方法可以在声明后初始化这个数组?或者设置array1 中的每个元素的唯一方法是使用 for 循环,例如:
for (int i = 0; i < ARRAY_SIZE; i++)
array1[i] = 0;
// initialized with a for loop
for (int i = 0; i < ARRAY_SIZE; i++)
// now it's guaranteed to be 0
printf("array1[%d]: %d\n", i, array1[i]);
非常感谢您的帮助。我知道这有点像菜鸟问题,但它是在我试图更熟悉 C 语言并尝试一些非书籍示例代码时出现的。
如果您怀疑可能有一些我没有得到的基本知识,请告诉我,我会仔细阅读。
【问题讨论】:
-
我认为你应该试试
memset函数。它经过优化以使用常量值初始化数据块。 -
好的,谢谢。不过,它仅适用于使用 0 进行初始化(知道我在示例中使用了 0 初始化数组,因此它实际上可以工作)。和 -1 (and it's not really guaranteed)。不过还是谢谢你。
-
哦,我的错。没错,
memset是特定于字节数组的。 -
在 C 中,变量(数组或结构或...)只能在声明时“初始化”。此后,它必须被分配。分配时,不使用
memset()之类的函数,必须分配每个实体。
标签: c arrays initialization declaration