C 使用for循环中每次迭代都会更改的字符串作为向量的名称

C 使用for循环中每次迭代都会更改的字符串作为向量的名称,c,loops,memory,C,Loops,Memory,我想在c中使用循环中的指针分配内存。我发现问题的答案与此类似,但与这个具体问题的答案不同。 比如说 char name_bin[50]; for (int i=0; i<NB; i++) { sprintf(name_bin, "bin_vector%d", i);

我想在c中使用循环中的指针分配内存。我发现问题的答案与此类似,但与这个具体问题的答案不同。 比如说

char name_bin[50]; 
for (int i=0; i<NB; i++) {                                                                                                    
  sprintf(name_bin, "bin_vector%d", i);                                                                                      
  double *name_bin = (double *) malloc(sizeof(double) * NGMAX);                                                             
}
char name_bin[50];

对于(int i=0;i您不能使用运行时派生的名称创建新变量。在C中,实现这一点的方法是使用一个将字符串与对象关联的表。表的实现方式取决于您的要求和您愿意处理的复杂性。对于少量名称,可以使用链接列表足够了。对于大量的名称,您可能需要一个树或哈希表

但是,您的特定问题可以通过一个简单的数组来解决

double *bin_vector[NB];

然后,您可以使用
bin\u向量[5]引用第6个bin

对于一维数组,每个大小
NGMAX
的二维数组都有不同的整数名
0
1
2
等。但是您的示例代码有缺陷-您在同一范围内使用了两次相同的变量名。感谢您的帮助,我试图避免使用二维数组,但我想这就是o唯一的方法..?您正在尝试在运行时创建变量名?我知道没有办法这样做。哦,变量名不在同一范围内。它们具有相同的名称,但在循环范围内定义的名称优先于在函数范围内定义的同一变量名。只是不要这样做,让variable名称是唯一的。看看读者或编码人员会多么容易混淆它们?感谢所有的反馈。我知道我试图做的事情无法完成,所以我使用了指针数组,代码看起来像这个双重名称_bin[NB];例如(int i=0;在第一个名称_bin之前应该有一个*,在第二个double之后也应该有一个*。格式删除了它们。