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