如何使用函数外的for循环创建多个全局变量?

时间:2018-05-23 05:27:09

标签: c

我有一个列表,我想为列表中的每个项目创建一个全局计数器,初始值设置为1。我以为我会用for循环执行此操作(我的实际列表比下面的示例大很多)但是我只是意识到for循环不能在函数之外工作。如何使以下代码生效?

char* list[] = {"A", "B", "C"};

for (int i = 0; i < sizeof(list); i++){
    int counter[i] = 1;
    }
}

1 个答案:

答案 0 :(得分:4)

这就是你所追求的?

char* list[] = {"A", "B", "C"};
int counter[] = {1, 1, 1};

只需在全局范围内声明它们并初始化counter就像初始化list一样。

也可以全局声明counter,然后在main()for循环的任何地方初始化它:

char* list[] = {"A", "B", "C"};
int counter[3];

int main(void) {
    for (int i = 0; i < sizeof(list) / sizeof(*list); i++) {
        counter[i] = 1;
    }
}

甚至更好,根据counter的大小计算list所需的内存量:

char* list[] = {"A", "B", "C"};
int *counter;

int main(void) {
    int numElements = sizeof(list) / sizeof(*list);

    counter = malloc(numElements * sizeof(*counter));
    // check for malloc() failure

    for (int i = 0; i < numElements; i++) {
        counter[i] = 1;
    }
}

请注意,您不能简单地使用sizeof(list) ...来返回已分配的内存list。您需要将sizeof(list)除以每个元素的大小sizeof(*list),以获取元素数量