2017-04-26 45 views
0

我試圖將2x2 char矩陣傳遞給我的函數,以便我可以修改其內部的值。現在在我的代碼中,唯一改變的值是矩陣的第一行,第一行不改變。通過引用C傳遞2D數組並修改值

控制檯

,我的結果是

 C[0] = ab 
    C[1] = 

所以C [1]是不是在我的功能更新,請幫我弄清楚是怎麼回事。

下面的代碼

#include<stdlib.h> 
    #include<stdio.h> 
    #include<string.h> 

    void changeMatrix(char (*matrix)[2][2]){ 
     strcpy(*matrix[1], "cd"); 
     strcpy(*matrix[0], "ab"); 
    } 

    int main(){ 
     char C[2][2]; 
     changeMatrix(&C); 
     printf("C[0] = %s \n", C[0]); 
     printf("C[1] = %s \n", C[1]); 

    } 
+3

這些字符串需要3個字符的空格 - 2個字母+'\ 0'(字符串終止符)。 –

+0

就是這樣。非常感謝你。但是現在1號位出現了一些垃圾。 C [0] = ab C [1] =t cd –

+1

不需要所有指針。刪除所有'*'和'&'。 –

回答

1

這不是你如何聲明接收C. 一個matriz函數的函數原型應該是:

void changeMatrix(char matrix[2][2]); 

在於在括號中的第一個數字被忽略。 你應該調用這樣的功能:

char C[2][2]; 
changeMatrix(C); 

之所以如此,是因爲記住,數組的名字就是數組的第一個元素的地址。聲明爲char C[n][m]的矩陣是n * m個位置的陣列,其中前m個位置屬於第一列,依此類推。

矩陣就是一種一維數組。

+1

OP代碼和代碼都是通過引用傳遞矩陣的正確方法。 (儘管OP代碼在函數體內部發生了錯誤) –