我有一个列表,我想为列表中的每个项目创建一个全局计数器,初始值设置为1
。我以为我会用for
循环执行此操作(我的实际列表比下面的示例大很多)但是我只是意识到for
循环不能在函数之外工作。如何使以下代码生效?
char* list[] = {"A", "B", "C"};
for (int i = 0; i < sizeof(list); i++){
int counter[i] = 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)
,以获取元素数量