2011-06-26 6 views
2

私が持っている警告:注:予想 'フロート(*)[100]' が、引数は型である 'フロート(*)[100] [100]'

note: expected ‘float (*)[100]’ but argument is of type ‘float (*)[100][100]’ 

My機能がどのように見えます

int readfile (float macierz_A[MAXSIZE][MAXSIZE], float macierz_B[MAXSIZE][MAXSIZE]) 
... 
float A[MAXSIZE][MAXSIZE]; 
float B[MAXSIZE][MAXSIZE]; 
int r1;// = 3; 
r1 = readfile(&A, &B); 

&が削除されたことを

r1 = readfile(A, B); 

注:この中へ

r1 = readfile(&A, &B); 

+1

http://c-faq.com/aryptr/index.html、特にセクション12および18。 –

答えて

3

は、これを変更してください。非常に単純な方法で、多次元配列ではなく、多次元配列へのポインタを渡しています。 (あなたは関数宣言で宣言されている)

+0

はうまくいきます、ありがとうございます。 –

1

これは間接の1つのレベルは、あなたが実際にポインタをしたい場合だけ、

r1 = readfile(A, B); 

を試すか

r1 = readfile(&A, &B); 

多すぎます各マトリックスに関数を

int readfile (float (*macierz_A)[MAXSIZE][MAXSIZE], float (*macierz_B)[MAXSIZE][MAXSIZE]) 
に変更する
+1

これは間接的なレベルではありません。これは単に同じアドレスへのポインタですが、間違った型(2次元配列の最初の行へのポインタではなく2次元配列へのポインタ、それ自体は1次元配列)です。 –

+0

@R .. - そうですね。おそらく行列とその行を異なるレベルと考えていたかもしれませんが、それは宣言された方法によって異なります。 –

3
void f(int p[M][N]); 

はNが100で、コンパイラがタイプint(*)[100]の発現を期待し、あなたの場合は

void f(int (*p) [N]); //pointer to array of N elements 

に相当します。しかし、Aは(おそらく)タイプint[100][100]であるため、&Aint(*)[100][100]というエラーが表示されます。あなたは、その住所なしでAを渡す必要があります。すなわち、

readfile(A, B) 
1

ここでの問題は、のAとBのアドレス(いずれも2次元配列です)を渡していますが、関数 "readfile"ではfloat [100] [100]の値しか受け付けていません。

float [] []もコンパイラによってfloat * []と解釈されます(int *はint []と同じです)。

関連する問題