2011-06-26 20 views
2

我警告:注:應爲 '浮動(*)[100]',但參數的類型爲 '浮置(*)[100] [100]'

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

我的功能看起來像:

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); 

任何想法?

+1

http://c-faq.com/aryptr/index.html,特別是第12和18部分。 –

回答

3

嘗試改變這一點:

r1 = readfile(&A, &B); 

進入這個:

r1 = readfile(A, B); 

注意,&已被刪除。以一種非常簡單的方式說,您傳遞的是一個指向多維數組的指針,而不是多維數組。 (如您在函數聲明中聲明)

+0

很好用,謝謝。 –

1

這是剛剛嘗試

r1 = readfile(A, B); 

或者間接太多

r1 = readfile(&A, &B); 

的一個級別,如果你真的指針到每個矩陣,改變功能爲

int readfile (float (*macierz_A)[MAXSIZE][MAXSIZE], float (*macierz_B)[MAXSIZE][MAXSIZE]) 
+1

這不是一個額外的間接程度。它只是一個指向相同地址的指針,但是類型錯誤(指向二維數組的指針,而不是指向二維數組的第一行的指針,該指針本身就是一維數組)。 –

+0

@R .. - 好的,是的。我可能會想到矩陣和它的行爲不同的層次,但這取決於它是如何聲明的。 –

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

相當於

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

在你的情況,N是100和編譯器期望int(*)[100]型的表達。但由於A(推測)是int[100][100],所以&A的類型是int(*)[100][100],這是錯誤告訴你的。您必須通過A,而不是其地址,即

readfile(A, B) 
1

好的。這裏的問題是你傳遞了A和B的地址,它們都是二維數組,但在函數「readfile」中,你只接受float [100] [100]的值。

這是一個警告而不是錯誤的原因是因爲:float [] []也被編譯器解釋爲float * [](就像int *相當於int [])。