2016-11-09 116 views
-3

我有几个问题需要理解u /使用c中的指针实现一些小的问题。 我有一个4x4矩阵,我想转置它。其实施已经开始。但知道我想要的,但方法的逻辑,使其更加花哨。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'

所以我的问题是,为什么它必须是一个指针,什么时候使用指针?我只是想整个变量来替换变量,将它转回并打印出来,我需要指出吗?谢谢你的帮助。

+4

[返回从函数在C语言的局部变量(http://stackoverflow.com/问题/ 4824342 /返回本地变量从函数在c) –

+1

在你的函数内,'char new_array [4] [4];'在栈上声明一个数组。只要函数返回,这些数据就会丢失。我建议你使用'malloc()'在堆上创建一个数组,并返回一个指向它的指针。 –

+1

该功能是无稽之谈。编程时,你实际上必须知道你在做什么。你不能仅仅通过试验和错误来猜测。如何阅读关于C书中数组和指针的章节呢?我相信会有例子。 – Lundin

回答

2

函数不应返回在其中声明的非静态数组。


更改你的主代码:

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 
}