【问题标题】:How can I create N variables in for?如何在 for 中创建 N 个变量?
【发布时间】:2017-11-06 13:10:17
【问题描述】:

我需要一些方法来通过for创建 N 个变量(数字大于 1)?
例如,类似的东西:

 int N=1000;   
 for(int i=0; i < N; i++){  
    char* var_i = malloc(sizeof(1));  
    } 

注意:我知道上面的代码不起作用,我写它只是为了解释我的意图。

【问题讨论】:

  • 创建一个数组。
  • 与您的问题无关,但请记住1int,这意味着sizeof(1) 等于sizeof(int)
  • 我想了想,我知道它正在工作,但是,我想知道它是否可以在没有数组的情况下通过 for-loop 来实现 - 即,只需使用单个变量进行任何迭代。
  • @StackUser:不,你也不想这样做。这是一个很常见的初学者问题,但答案是“学习使用集合”
  • 至于你的问题,C 没有reflection,你不能在运行时“创建”新变量。您可以在循环内定义一个变量,其生命周期将是当前迭代,但该变量将在编译时由编译器定义和分配。

标签: c variables for-loop


【解决方案1】:

你可以使用数组。举两个例子:

#include <stdio.h>
#define N 10000

int main(void)
{
    char array[N];
    for (size_t i = 0; i < N; i++) {  
         /* Do what you want. */
    } 
    return 0;
}

或者如果你想在堆中:

#include <stdio.h>
#include <stdlib.h>
#define N 10000

int main(void)
{
    char *array = malloc(sizeof *array * N);
    if (array == NULL) {
        perror("Malloc");
        exit(EXIT_FAILURE);
    }
    for (size_t i = 0; i < N; i++) {  
         /* Do what you want. */
    } 
    free(array);
    return 0;
}

【讨论】:

  • 为什么sizeof(char) * N 而不是N 因为sizeof(char) 总是 1?可以使用sizeof *array * N 来确保匹配的元素大小。
【解决方案2】:

如果要声明 N 个计数变量...

#include<stdio.h>
#define CHUNK 64

const int N=10; //count of the variables

int main(void){
    char* vars[N], i; //declare the array of variables

    for(i=0;i<N;i++){ //alloc variables
        vars[i]=(char*)malloc(CHUNK*sizeof(char));
        if(!vars[i]){
            printf("out of memory!");
            return 1;
        }
    }

    //do stuff

    //free memory
    for(i=0;i<N;i++)
        free(vars[i]);

    return 0;
}

【讨论】:

    猜你喜欢
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多