如何在初始化后或循环中第二次将数组的所有元素设置为0?

时间:2016-05-08 14:41:47

标签: c arrays

我坚持使用数组的基础知识。我用谷歌搜索,但我无法解决这个问题。这个问题是以概念为导向的,但我无法弥合差距。请帮我解决这个问题。

我第一次初始化数组非常清楚,但是下次无法清除数组:-(: - (

int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; // All elements of myArray are 5
int myArray[10] = { 0 };    // Will initialize all elements to 0
int myArray[10] = { 5 };    // Will initialize myArray[0] to 5 and other elements to 0
static int myArray[10]; // Will initialize all elements to 0

int myArray[10];// This will declare and define (allocate memory) but won’t initialize
int i;  // Loop variable
for (i = 0; i < 10; ++i) // Using for loop we are initializing
{
    myArray[i] = 5;
}

问题陈述:

我正在使用一个大小为10000的全局数组。我有1k迭代循环,我必须将数组设置为'零'或预定义值,即每次迭代为5。

我在交互结束时这样做:

myArray[10000] = { 0 };

在GCC编译器中编译时出错。

error: [11707] syntax error before '{' token

请帮我解决这个问题。

提前致谢。

2 个答案:

答案 0 :(得分:3)

myArray[10000] = { 0 };

是一项任务,而非宣言,因此它不会起作用。你应该循环。

int myArray[10000] = { 0 };

for(int i = 0; i < 1000; i++) {
    for (int j = 0; j < 10000; j++) {
        myArray[j] = ;  // put your value here.
    }
}

我不确定这个目的。基准?

答案 1 :(得分:0)

memset的简单实现,没有任何优化,是一个循环,将数组的每个位置设置为所需的值。问题是memset为每个字节执行此操作,并且它不是您想要的。我建议你实现memset的替代方法:

int *mymemset (int *s, int v, size_t n) {
    unsigned int *p = s;
    while(n--) {
        *p++ = (unsigned int)v;
    }

    return s;
}

并用它来初始化你的数组。