我有很多不同名称的2D阵列
喜欢

const int a[][2]
{
    {1,2},
    {3,4},
};
const int b[][2]
{
    {5,6},
    {7,8},
};


还有很多....
我把数组名称放在其他变量中

int t_huff,f_huff;

t_huff =a;
f_huff =b;


现在我想编写一个函数,在其中获取参数(数组名),然后在切换时使用参数

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

break;

case b:

break;
}
}


但是当我这样做时,我得到了一些警告,例如
警告C4047:“ =”:“ int”的间接级别与“ const int(*)[2]”不同

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

最佳答案

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

选项1:指向int的指针

void function_name(int *base)
{
   int i = 0;
   int j = 1;
   int v = base[i * 2 + j];
   …
}


使用以下命令调用它:

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


选项2:指向数组的指针

void function_name(int (*arr)[][2])
{
    int i = 0;
    int j = 1;
    int v = (*arr)[i][j];
    …
}


使用以下命令调用它:

function_name(&a);
function_name(&b);


指向数组的指针的优点是您可以照常使用下标(或多或少;不过,您需要使用(*arr)表示法)。

10-08 08:06
查看更多