我打字這個程序,並分配一個10個整數數組的地址到一個指向2個整數數組的指針。不兼容的指針類型,而分配指針指向整數數組
int (*a)[2],i;
int a1[10]={1,12,3,4,5};
a=a1;
printf("%d",*(*a+1));
輸出是12,但我也得到一個警示:
爲什麼會收到這樣的警告和
「從兼容的指針類型[默認啓用]分配」如何擺脫這個警告?
我打字這個程序,並分配一個10個整數數組的地址到一個指向2個整數數組的指針。不兼容的指針類型,而分配指針指向整數數組
int (*a)[2],i;
int a1[10]={1,12,3,4,5};
a=a1;
printf("%d",*(*a+1));
輸出是12,但我也得到一個警示:
爲什麼會收到這樣的警告和
「從兼容的指針類型[默認啓用]分配」如何擺脫這個警告?
有兩個問題:
a
是一個指向整數數組,但你嘗試從整數數組分配給它。
a
是一個指針到一個數組,而a1
不是。
首先改變a
是一個指針十個整數數組:
int (*a)[10];
然後指針分配給它的數組:
a = &a1;
我總是想知道爲什麼會出現這些問題。不能讀取警告?如果他們有疑問,他們是不是可以把這個類型轉換成cdecl.org?這是* soooo * basic(甚至更重要的是,只需少量的努力即可解決) – 2013-07-26 06:17:27
...他們是否瞭解cdecl? –
@ElchononEdelson他們能讀*嗎?:P – 2013-07-26 07:08:27
我爲什麼獲取此警告
因爲a1
是int[10]
,因此當它分配給指針時衰減爲int *
,但a
的類型爲int (*)[2]
- 這些是不兼容的類型。
如何擺脫此警告?
聲明a
爲int (*a)[10]
,然後使用地址的(&
)操作:
a = &a1;
你需要編譯時邊界檢查?
如果不是的話,你爲什麼不:
int *a, i;
int a1[10]={1,12,3,4,5};
a=&a1[0];
printf("%d",a[1]);
一個是指針的數組。 – elyashiv
@elyashiv再次檢查該聲明......'a'是指向整數數組的指針,而不是指針數組。 –
你只需要在表達式'a = a1;'中在'a1'之前加'&',所以它會是'a = &a1;'。 –