我在理解/用c中的指针实现一些小东西时遇到了一些问题。 我有一个 4x4 矩阵,我想转置它。它的实现已经开始发挥作用。但我知道我想将逻辑转化为方法,使其更加奇特。
char arr[4][4] = { //filled }
printArray(arr)
第一个代码部分仅打印我格式化的数组并且其工作完美。
char matrixTranspose(char array[4][4]) {
char new_array[4][4];
// logic
return new_array;
}
所以知道我想取回转置矩阵,但我总是得到警告:
warning: function returns address of local variable [-Wreturn-local-addr]
warning: return makes integer from pointer without a cast [enabledby default]
我的主要方法中的进一步步骤是打印新数组,例如:
char new_matrix = matrixTranspose(arr);
printArray(new_matrix);
这会导致错误:
warning: passing argument 1 of 'printArray' makes pointer from integer
without a cast [enabled by default] note: expected 'char (*)[4]' but argument is of type 'char'
所以我的问题是,为什么它必须是指针以及何时使用指针?我只是想完全放弃变量,转置它,将其返回并打印它,我需要尖角吗?谢谢你的帮助。
最佳答案
函数不应返回在其内部声明的非静态数组。
<小时/>将主要代码更改为:
char arr1[4][4] = {...};
char arr2[4][4];
matrixTranspose(arr1,arr2);
printArray(arr1);
printArray(arr2);
你的功能是:
void matrixTranspose(const char input_arr[4][4],char output_arr[4][4])
{
// logic
}
关于C 返回局部变量和 4x4 矩阵的错误预期参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40506851/