C 在变量中使用数组名

C 在变量中使用数组名,c,C,我有很多不同名称的2D数组 像 那么多。。。。 我在其他变量中使用数组名,如 int t_huff,f_huff; t_huff =a; f_huff =b; 现在,我想编写一个函数,其中接收argumentarray名称,然后在switch case中使用参数 function_name(string name) { switch(name) { case a: break; case b: break; } } 但当我这么做的时候,我得到了一些警告,比如 警告C4047:“=”:

我有很多不同名称的2D数组 像

那么多。。。。 我在其他变量中使用数组名,如

int t_huff,f_huff;

t_huff =a;
f_huff =b;
现在,我想编写一个函数,其中接收argumentarray名称,然后在switch case中使用参数

function_name(string name)
{
switch(name)
{
case a:

break;

case b:

break;
}
}
但当我这么做的时候,我得到了一些警告,比如 警告C4047:“=”:“int”与“const int*[2]”的间接寻址级别不同


请帮助我从我的项目中删除此警告

您不能这样做。您需要获取数组变量t_huff[]。你可以把一个叫t_huff的人叫做
&t_huff=a

您可能需要使用指向数组的指针,但使用指向int的指针会更容易。如注释中所述,您不能简单地将字符串名称映射到变量;无论如何,你真的不想多次写出代码

选项1:指向int的指针 使用以下命令调用它:

function_name(&a[0][0]);
function_name(&b[0][0]);
function_name(&a);
function_name(&b);
选项2:指向数组的指针 使用以下命令调用它:

function_name(&a[0][0]);
function_name(&b[0][0]);
function_name(&a);
function_name(&b);

指向数组的指针的优点是,您可以或多或少地将下标用作正常值;但是,您需要使用*arr符号。

您正在尝试进行反射,而C不支持反射。不能以字符串开头并获取C变量。而且,您的代码并不像您想象的那样。发出警告的原因是您试图将int*分配给int。您的评论表明您认为t_huff=a正在将t_huff设置为数组a的名称。这根本不是它所做的。选项1在技术上不是未定义的行为吗?@DrewMcGowen:你认为未定义的行为是由什么构成的?在我看来,这一切都是100%符合犹太教的,但我完全不确定你可能认为的是未定义的行为。我指的是答案,这表明指向[0][0]的指针只能用于迭代第一行,而不是整个数组。@DrewMcGowen:AFAIAC,中公认的答案是胡说八道。从这个问题上看,还不清楚他们在对int*进行什么转换。我没有对int*进行任何转换;我只是取一个整数的地址,然后用它作为数组的开始。我的代码所做的计算是编译器在幕后所做的。我只是不相信这是未定义的行为。不过,我今晚没有精力去揭穿它。老实说,如果它被认为是未定义的行为,基于阵列连续性的要求,我会感到惊讶。然而,正如我之前与其他人讨论的那样,我不能100%确定两个指针是否可以比较相同的值,即p==q,但其中一个指针的界限不同于另一个指针。
function_name(&a);
function_name(&b);