2013-07-26 129 views
-1

我打字這個程序,並分配一個10個整數數組的地址到一個指向2個整數數組的指針。不兼容的指針類型,而分配指針指向整數數組

int (*a)[2],i; 
int a1[10]={1,12,3,4,5}; 
a=a1; 
printf("%d",*(*a+1)); 

輸出是12,但我也得到一個警示:

爲什麼會收到這樣的警告和

「從兼容的指針類型[默認啓用]分配」如何擺脫這個警告?

+0

一個是指針的數組。 – elyashiv

+2

@elyashiv再次檢查該聲明......'a'是指向整數數組的指針,而不是指針數組。 –

+0

你只需要在表達式'a = a1;'中在'a1'之前加'&',所以它會是'a = &a1;'。 –

回答

4

有兩個問題:

  1. a是一個指向整數數組,但你嘗試從整數數組分配給它。

  2. a是一個指針到一個數組,而a1不是。

首先改變a是一個指針十個整數數組:

int (*a)[10]; 

然後指針分配給它的數組:

a = &a1; 
+5

我總是想知道爲什麼會出現這些問題。不能讀取警告?如果他們有疑問,他們是不是可以把這個類型轉換成cdecl.org?這是* soooo * basic(甚至更重要的是,只需少量的努力即可解決) – 2013-07-26 06:17:27

+1

...他們是否瞭解cdecl? –

+0

@ElchononEdelson他們能讀*嗎?:P – 2013-07-26 07:08:27

2

我爲什麼獲取此警告

因爲a1int[10],因此當它分配給指針時衰減爲int *,但a的類型爲int (*)[2] - 這些是不兼容的類型。

如何擺脫此警告?

聲明aint (*a)[10],然後使用地址的(&)操作:

a = &a1; 
0

你需要編譯時邊界檢查?

如果不是的話,你爲什麼不:

int *a, i; 
int a1[10]={1,12,3,4,5}; 
a=&a1[0]; 
printf("%d",a[1]); 
相關問題