2D矩形阵列转化为功能

时间:2013-03-14 17:00:43

标签: c

我有一个2D矩形阵列char rect_array [4][20], 内容由用户定义, 按如下方式传递给固定函数原型:

int findTarget (char *string, char *nameptr[], int num)

以下不起作用,因为在rect_array中加下划线为错误:

findTarget (user_input, rect_array, no_of_names);

尝试了等等:

rect_array[4][20]
&rect_array
rect_array[4]

我可以知道出了什么问题吗?如果原型必须如上所述?我是否更改了数组声明?

1 个答案:

答案 0 :(得分:1)

编辑根据问题添加的信息,OP无法改变函数原型,必须是:

int findTarget (char *string, char *nameptr[], int num)

在这种情况下,将2D表“传递”到此函数的唯一方法是通过临时指针数组。一些花哨的malloc() - 会起作用,但最终会归结为:

char data[4][20];
char *dataptrs[] = { data[0], data[1], data[2], data[3] };
char name[] = "name";

findTarget(name, dataptrs, sizeof(dataptrs)/sizeof(dataptrs[0]));

原帖

对于具有固定的20-char长度表的C解决方案:

int findTarget (const char *string, const char names[][20], size_t rows)
{
   // each row ("rows" count of them) is fixed at 20 chars wide.
   // ....
}

或者...

int findTarget (const char *string, const char (*names)[20], size_t rows)
{
   // each row ("rows" count of them) is fixed at 20 chars wide.
   // ....
}

这样调用:

char data[4][20];

findTarget("targetName", data, sizeof(data)/sizeof(data[0]));

注意:如果您的平台支持它们(并且几乎所有这些执行),您可以在C中使用VLA(可变长度数组)来使宽度成为函数的任意参数:< / p>

int findTarget (const char *string, 
    size_t rows, size_t cols, 
    const char (*names)[cols])
{
   // each row ("rows" count of them) is variable to "cols" columns wide.
   // ....
}

调用为:

char data[4][[20];

findTarget("target", sizeof(data)/sizeof(data[0]), sizeof(data[0]), data);