C - 如何使用循环定义全局变量?

时间:2015-04-10 05:09:55

标签: c arrays

很抱歉,如果这是一个简单的问题,但我已经对此进行了大量搜索,发现没有任何相关内容,可能是因为我不熟悉编程并且不知道具体的术语。 所以,我有一个工作正常的程序。在代码的开头,我将以下数组定义为全局变量:

static double arr[] = {
    [0] = 50,
    [1] = 0
};

但是,我处理大量数据时,我的数组需要有很多元素。如果我被允许在变量的定义中使用循环,那将非常容易。但是,每次我尝试这个时,我都会收到以下错误消息

expected primary-expression before

为了正确定义数组的元素,我该怎么做?

2 个答案:

答案 0 :(得分:4)

对于C样式数组,您需要事先用必要的大小声明变量。

static double arr[YOUR_SIZE];

然后只有在main中,你可以填充元素

int main () {
    for (int i=0; i < ((sizeof(arr))/(sizeof(arr[0])))); ++i) {
        //whatever here
        arr[i] = i;
    }
}

对于C ++,您可以使用运行时分配的向量

std::vector<double> arr;

int main () {
    for (int i=0; i < YOUR_MAX; ++i) {
        arr[i] = i;
    }
}

答案 1 :(得分:1)

虽然您可以在C99及更高版本中使用指定的初始值设定项,但该标准要求初始化程序需要长时间写出。 GCC提供范围初始化扩展,以便您可以初始化具有相同非零值的索引范围(您不需要扩展来将所有内容初始化为零)。

int array[100] =
{
    [50 ... 80] = 27,  // GCC extension
};

请注意,省略号周围需要空格,因为最大限度的咀嚼&#39;规则。 50.看起来像一个有效的浮点数,因此不是有效的数组索引。

但是,即使在GCC中,也无法在初始化程序中写出循环。