C 返回局部变量和 4x4 矩阵的错误预期参数

标签 c arrays pointers char

我在理解/用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/

相关文章:

c - 打印长而不警告

c++ - 为什么 char* 和 int* 表现不同

c++ - 如何从一系列快照中编码视频?

arrays - 如何识别 MATLAB 中数据存储在数组边界之外的位置?

java - 使用 JNI 将字符串从 C 发送到 Java

c - 释放对象错误

javascript - Jquery检查数组是否包含子字符串

c - C 处理指针时出现段错误

c - 拆解二元炸弹第三阶段逻辑难理解

c - 初始化后无法将字符串放入数组中 - 使用适用于 ARM 的 TI 编译器 5.1.8 的 CCS 6