所以我是編程新手,我有一個我必須撰寫的程式,它有一個整數陣列,我必須將它傳遞給一個帶有指標的函式,然后是一個雙指標。在我撰寫代碼后,我遇到了這個我找不到解決方案的錯誤。錯誤是:
從不兼容的指標型別“int *”初始化“int **”[-Wincompatible-pointer-type]
我寫的代碼是這樣的:
int main(){
int i;
int arr[]={3,-15,19,0,-984};
int *p=arr;
funzione(p,sizeof(arr)/sizeof(arr[0])); //The first function
for(i=0;i<(sizeof(arr)/sizeof(arr[0]));i ) //print of the single pointer (p)
printf("%d\n",p[i]);
int **g=p; //the error results to be coming from p in this row
for(i=0;i<(sizeof(arr)/sizeof(arr[0]));i ) //print of the double pointer (g)
printf("%d\n",g[i]);
funzione2(g,sizeof(arr)/sizeof(arr[0])); //The second function
return 0;
}
我的問題是如何消除此錯誤。
uj5u.com熱心網友回復:
變數p具有型別int *,而初始化變數g具有型別int **。
int **g=p; //the error results to be
這些指標型別不兼容,并且沒有從一種指標型別到另一種指標型別的隱式轉換。
你需要寫
int **g = &p;
for(i=0;i<(sizeof(arr)/sizeof(arr[0]));i ) //print of the double pointer (g)
printf("%d\n",( *g )[i]);
請注意,如果您g也按以下方式宣告指標,則 for 回圈可能看起來相同
int ( *g )[5] = &arr;
for(i=0;i<(sizeof(arr)/sizeof(arr[0]));i ) //print of the double pointer (g)
printf("%d\n",( *g )[i]);
該運算式sizeof(arr)/sizeof(arr[0])還具有無符號整數型別size_t。因此,最好將變數i也宣告為具有無符號型別size_t而不是有符號型別int。
size_t i;
盡管在使用它的最小范圍內宣告變數會更好i,例如
for( size_t i=0;i<(sizeof(arr)/sizeof(arr[0]));i ) //print of the double pointer (g)
printf("%d\n",( *g )[i]);
這叫做函式
funzione2(g,sizeof(arr)/sizeof(arr[0])); //The first function
不是評論中寫的第一個函式。:)
uj5u.com熱心網友回復:
注意:這不是一個嚴格的答案,但足以讓您繼續并解決您的編譯器問題。
看,phas typeint*而gis of type int**。正如錯誤明確指出的那樣,它們是不兼容的。
p是指向 int 的指標,而g指向int. 如果您這樣做int **g=&p;,編譯器將停止抱怨,因為型別現在匹配。
& 運算子獲取其引數的地址(將其想象為從變數中獲取指標)。如果您申請&一個指標,那么您將取出一個p已經是指標的指標,這就是您最終獲得指標指標的方式。
我建議你買一本好的C書并正確學習指標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/509959.html
上一篇:如何在多個函式之間傳遞結構指標
下一篇:如何釋放函式內的指標記憶體?
