2015-03-31 43 views
0
#include<stdio.h> 

Funtions prototypes 
int functiondouble(int b); 
void notreturnanything(int a, int b); 
void byreference(int *b); 
void receivevector(int v[]); 
void recievematrix(int m[][1]); 

int main() { 
    int c; 
    printf("%d\n",functiondouble(5)); 
    notreturnanything(3,9); 
    c = 0; 
    byreference(&c); 
    printf("%d\n",c); 
    int a[10], b[3][4]; 
    receivevector(a); 
    recievematrix((int)b); // <----- warning: passing argument 1 of 'recievematrix' from incompatible pointer type [enabled by default]| 
    return 0; 
} 

int functiondouble(int b) { 
    int a; 
    a = 2*b; 
    return a; 
} 

void notreturnanything(int a, int b) { 
    printf("%d\n",a+b); 
} 

沒問題。這兩個功能沒有問題。他們收到一個沒有問題的價值。從不兼容指針類型傳遞參數1'recievematrix'

void byreference(int *b) { 
    *b = 7; 
} 

void receivevector(int v[]) { 
    scanf("%d", &v[0]); 
} 

void recievematrix(int m[][1]) { 
    scanf("%d", &m[1][1]); 
} 

這是一個證明如何在C中工作的數組,但拉錯誤而不是錯誤在哪裏。

+0

爲了代碼的可讀性,建議爲函數和變量名稱使用'駱駝'情況 – user3629249 2015-03-31 22:16:01

+0

應始終檢查scanf()函數的返回值和函數系列,以確保操作在此調用上成功 – user3629249 2015-03-31 22:18:53

+0

(也許是類似的調用)'recievematrix((int)b);'被調用的函數需要一個指向int的指針,而不是int。也許使用:'recievematrix((int *)b);' – user3629249 2015-03-31 22:22:58

回答

0

嘗試

void recievematrix(int m[3][4]) 

而且

recievematrix(b); 
1

這...

int b[3][4]; 

...聲明四個int三大數組的數組。鑑於該聲明,在大多數表達式中,數組名b被轉換爲指向其第一個元素的指針;也就是指向四個數組的指針intint (*)[4]);

這...

int m[][1] 

...聲明一個int陣列的未指定數量的陣列。在函數的參數列表中,它被轉換爲指向一個intint (*)[1])的數組的指針。

int (*)[4]int (*)[1]不兼容。要解決此警告(你當然應該做的),而不改變變量b的類型,receivematrix()簽名更改爲

void recievematrix(int m[][4]); 

void recievematrix(int (*m)[4]); 

甚至

void recievematrix(int m[3][4]); 

對於這件事,即使

void recievematrix(int m[17][4]); 

會使警告無效,但我不建議使用它。

相關問題