2016-11-09 115 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 
}