2017-04-26 100 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代码在函数体内部发生了错误) –