2017-04-26 17 views
0

2x2 char 행렬을 함수에 전달하려고합니다. 그래서 내부의 값을 수정할 수 있습니다. 지금 제 코드에서 변경된 유일한 값은 행렬의 첫 번째 행이고 행 1은 변경되지 않습니다. 콘솔참조로 C 배열을 전달하고 값을 수정하십시오.

, 내 결과가

 C[0] = ab 
    C[1] = 

그래서 C [1] 내 기능에 업데이트되지이다, 무슨 일이 일어나고 있는지 알아 내기 위해 저를 도와주세요.

여기에 함수 프로토 타입은해야 당신이 C. 에 matriz를받는 함수를 선언하는 방법되지 않는 코드

#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

입니다 :

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

가되는 그 괄호 안의 첫 번째 숫자 무시됩니다. 그리고이 같은 함수를 호출해야합니다 : 배열의 이름은 배열의 첫 번째 요소의 주소인지 기억 때문에

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

이, 그래서입니다. char C[n][m]으로 선언 된 행렬은 첫 번째 m 위치가 첫 번째 열에 속하는 등의 n * m 위치의 배열입니다.

행렬은 일종의 일차원 배열입니다.

+1

OP 코드와 코드는 모두 참조로 매트릭스를 전달하는 올바른 방법입니다. (OP 코드는 함수 본문에서 실수를 범합니다.) –