2017-04-26 13 views
0

2x2のchar行列を関数に渡そうとしていますので、その内部の値を変更できます。私のコードでは、変更される唯一の値は行列の最初の行です。行1は変更されません。コンソールで2次元配列を参照Cで渡して値を変更する

、私の結果は

 C[0] = ab 
    C[1] = 

だから、C [1]は、私の機能で更新されていないされて、何が起こっているかを把握するために私を助けてください。

ここでは、関数のプロトタイプがあるべきC. でマトリズを受け取る関数を宣言する方法ではありませんコード

#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コードは関数本体の内部で間違いを起こしますが) –