2013-09-06 9 views
7

私は、行と列whoses要素のインデックスを与える関数を記述しようとしているが0である関数のパラメータとしての行列を渡すが、それをコンパイル時に「エラー:配列タイプに不完全な要素タイプがあります」というエラーが表示されます。 私はまた、行列をグローバルに宣言し、ポインタを与えようとしました。しかし、それは私のためには機能しません。 これで私は行列をCの関数に渡すことができます。私は機能</p> <pre><code>void make_zero(int matrix[][],int row,int col) { int row, col; int i,j; for(i=0;i<row;i++) { for(j=0;j<col;j++) { if(matrix[i][j]==0){ printf("%d %dn", i, j); } } } </code></pre> <p>を使用してみました

+0

マトリックスを宣言/記入するコードを投稿してください。 –

+0

'matrix [i] [j]'ではなく 'i'と' j'を実際に印刷する必要があります。あなたはすでに値が0であることを知っています。 –

答えて

5

は、あなたがこのようint matrix[10][10];を宣言した場合、この

void make_zero(int row, int col, int matrix[row][col]) 
    { 
    int i,j; 
    for(i=0;i<row;i++) 
     for(j=0;j<col;j++) 
     { 
      if(matrix[i][j]==0) 
       printf("%d %d\n",i,j); 
     } 

    } 
+0

@Jonathan Leffler; 'void make_zero(int col、int matrix [] [col])'を使うとどうなりますか? – haccks

+0

この関数は、処理する行の数が不思議である限り機能します。初期化されていない変数を使用していないように修正しました...これはC99、VLAsを使用することに注意してください。ループの 'for(int i = 0; i

+0

;私はそれを読む:*多次元配列の列の数を指定する必要があります、我々は行の数を示す必要はありません*。 – haccks

6

Cの多次元配列は、最外の値を除いて長さを知る必要があるという問題があります。

void make_zero(void* _matrix,int row,int col) 
{ 
    int i,j; 
    int (*matrix)[col] = _matrix; 
    for(i=0;i<row;i++) 
     for(j=0;j<col;j++) 
     { 
      if(matrix[i][j]==0){ 
        printf("%d %d\n",i,j); 
     } 

    } 
} 
1

はと仮定してみてください。あなたは何ができるか

は、行列を保持するメモリへのポインタを渡した後、右の型にキャストです

make_zero(matrix,5,5); //function call 

void make_zero(int mat[][10],int row,int col) //definition 
{ 
//statements 
} 

編集:

上記溶液は限り常に渡された実際の配列は、10 の第2次元を持っているよう@ジョナサンレフラーは、私が作った

make_zero(5,5,matrix); //function call 
void make_zero(int row, int col, int matrix[row][col]) //definition 
    { 
    //statements 
    } 
+2

渡される実際の配列が常に第2次元の10を持つ限り、これは機能します。これはC89で必要だったものです。 VLA(可変長配列)対応のC99は、配列のサポートを強化します。 [回答](http://stackoverflow.com/a/18661858/15168)[haccks](http:// stackoverflow)を参照してください。あなたがまだ宣言していないものを使用することはできないので、引数の改訂された順序に注意してください。 –

+0

@JonathanLefflerご協力いただきありがとうございます。私の答えを変更しました。 – Gangadhar

関連する問題