如何在变量名称中创建变量?

时间:2013-11-16 21:23:27

标签: c

我希望这个循环将值添加到名为coefficient1-5的5个不同变量中, 我知道如何使用数组,但我希望变量是常规整数。

for(i=0;i<=4;i++){
    coefficient(i) = Dice();
}

我该怎么做? 谢谢!

2 个答案:

答案 0 :(得分:3)

您无法在运行时在C中计算变量名称,因此无法完成。你需要一个数组,但如果变量本身不在数组中,你可以使用指针数组。

int coefficient1;
int coefficient2;
int coefficient3;
int coefficient4;
int coefficient5;

int *ptrs[] = { 
  &coefficient1,
  &coefficient2,
  &coefficient3,
  &coefficient4,
  &coefficient5,
};
for(i=0;i<=4;i++){
    *ptrs[i] = Dice();
}

但如果这是一个真实案例,只需自己展开小循环

coefficient1 = Dice();
coefficient2 = Dice();
coefficient3 = Dice();
coefficient4 = Dice();
coefficient5 = Dice();

答案 1 :(得分:1)

简洁地说,你没有。

可能实现它的唯一机制是动态加载。在使用dlopen()dlsym()的系统上,如果变量是外部的,您可以在适当的句柄上使用dlsym()查找它们,但这是一个破解坚果的大锤 - 和一个首先不需要开裂的螺母。请注意,这不适用于局部变量(无论是自动变量还是静态变量),并且可能不适用于文件范围内的静态变量。


Hare-brained Techniques

for (i = 0; i <= 4; i++)
{
    switch (i)
    {
    case 0: coefficient1 = Dice(); break;
    case 1: coefficient2 = Dice(); break;
    case 2: coefficient3 = Dice(); break;
    case 3: coefficient4 = Dice(); break;
    case 4: coefficient5 = Dice(); break;
    }
}

请注意,写一下会更好:

coefficient1 = Dice();
coefficient2 = Dice();
coefficient3 = Dice();
coefficient4 = Dice();
coefficient5 = Dice();

这是一个非野蛮的方案,而你不能使用数组的系数;放弃循环,因为你没有要使用的数组。

这使用循环和辅助数据结构(指针数组)。这不是一个好主意。

int *coeffs[] = { &coefficient1, &coefficient2, &coefficient3, &coefficient4, &coefficient5 };
for (i = 0; i <= 4; i++)
    *coeffs[i] = Dice();