如何在C中为for循环增加变量名?

时间:2015-05-19 09:44:08

标签: c loops for-loop

如何在C中循环增加变量名?例如,我有一个变量K1,我希望每次循环到K2,K3,K4等时将名称增加一。我不能使用数组,因为我有大约1000个变量要循环。

更新:我应该澄清一点,我正在编程一个微控制器,而且板载空间非常有限。我希望循环的变量名是结构,每个长度为8个字节。因此,为了创建我之前创建的结构数组,我将不得不写出一个包含1000个数组名的数组?肯定有办法增加名字? 我马上就会发布我的代码。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

typedef struct reg0 {
    int address;
    union {
        struct {
            unsigned int bitfield1 : 1;
            unsigned int bitfield2 : 4;
            unsigned int bitfield3 : 2;
            unsigned int bitfield4 : 1;
        };
        uint8 DATA;
    };
} Reg0;

//Beneath this I have 1000 similar Register structures, each unique


int main()
{
    //Beneath this I have 1000 similar initializations, each unique
    Reg0 R0 = {.address = 0x0,      {{.bitfield1=0x1,.bitfield1=0x6,.bitfield3=0x2,.bitfield4=0x1}}};

for(i=0;i<=1000;i++){
    //Here I'd like to print each address field of each structure to the screen
    printf("Address of Reg%d is: %?", i, Ri);
}

return 0;

}

3 个答案:

答案 0 :(得分:3)

你不能通过变量名来做到这一点;名称适用于人类,并且在运行时不再存在。

建模的正确方法是使用数组。所以替换这个:

int K1, K2, K3, K4, ... K1000;

使用:

int K[1000];

然后使用循环索引访问数组:

for(size_t i = 0; i < sizeof K / sizeof *K; ++i)
  K[i]++;

如果你真的不能将变量压缩成一个数组,你可以添加间接并有一个指针数组,但初始化它会很糟糕:< / p>

int K1, K2, K3, ... K1000;
int *K[1000] = { &K1, &K2, &K3, ..., &K1000 };

然后你可以再次使用循环:

for(size_t i = 0; i < sizeof K / sizeof *K; ++i)
  (*K[i])++;

注意:上面的...只是答案中的符号,而不是C语法。你应该在那里输入更多东西。

答案 1 :(得分:1)

通常情况下,你不能。

一个程序被编译成二进制文件,变量名就不存在了。所以,你不能在运行时

然而,使用MACRO你可以以某种方式实现这一目标,但是,这既不是运行时也不是一种好的方法,最不是跨平台的可移植性和支持。

TL; DR回答 ::使用数组。这就是阵列的意思。

编辑:

您可以使用结构数组并使用索引访问arrary中的各个元素。那应该符合你的目的。

答案 2 :(得分:1)

首先,你不是。 C不对名称进行运行时操作;事实上,名称本身可能不存在。其次,是什么让你无法使用数组?它们不仅没有包含数千个条目的问题,而且它们是处理此类事物的理智方式(链接列表等其他结构可能是可用的)。