我有一个这样的函数(在文件file_name.c
中):
char function_name(multi_array[][10])
{
/*change some character of multi_array*/
return multi_array;
}
这需要multi_array
,一个多维字符数组,更改给定参数的某些字符,然后返回修改后的multi_array
。
在main.c
中,我调用这样的函数:
multi_array_in_main = function_name(multi_array_in_main);
但编译器给我一个错误“icompatible type char[10][10] from type char
”
我该怎么办?我对C不太自信所以我不知道..!
答案 0 :(得分:1)
你不需要退货。
变化:
char function_name(multi_array[][10])
要:
void function_name(multi_array[][10])
并且您的代码应该可以正常工作(function_name
将更新它作为参数接收的任何数组,只要维度正确)。
答案 1 :(得分:0)
更改函数以返回void
并删除return
语句。该数组实际上是作为指向它的第一个元素的指针传递的,因此您在函数内对它进行的任何更改实际上都会更改调用者中的原始对象。
void function_name(multi_array[][10])
{
/*change some character of multi_array*/
}
答案 2 :(得分:0)
在函数头中,声明函数返回“char”类型,但是返回char [] [10]的变量,它与声明中的变量(代码的第一行)不同。
解决方案取决于您真正想做的事情。如果要返回该多重阵列,请更改函数声明。您还将参数定义为数组数组,但它必须是“char数组的数组”。长话短说,你的申报行应该是这样的:
char[][] function_name(char multi_array[][10])
此外,由此函数在multi_array中进行的更改将更改multi_array甚至“函数外部”,因此您不需要返回它。所以你可能想写这个:
void function_name(char multi_array[][10])
答案 3 :(得分:0)
如上所述,你不需要返回任何东西。数组不会被复制,它会作为指向数组第一个元素的指针传递给您的函数。因此,您在函数内部更改的任何元素也将在外部更改,因为只有一个唯一的数组。
此外,如果您坚持,理论上,可以定义一个函数,返回指向与原始帖子最接近的数组的指针。宣言将是:
char (*function_name(char multi_array[][10]))[10] {
...
return(multi_array);
}
它太丑了,你可能更喜欢为它定义一个新类型:
typedef char (*multi_array_t)[10];
multi_array_t function_name(multi_array_t multi_array) {
...
}