2013-05-07 29 views
0

請告訴我去年2個語句之間的區別:數組名作爲指針和數組名與與運營商

int a[20]; 
int *b=a; 
int *c=&a; 

我覺得都是一樣的,但在最近的一次採訪面試官熱衷於知道我沒差別不知道。

有人請詳細說明一下。

我到這個職位,但不明白數組相關部分: Function pointers and address of a function

+1

重複數百次以上。 – 2013-05-07 03:22:01

+1

示例:[指針指針和數組指針之間的區別?](http://stackoverflow.com/questions/6474104/difference-between-pointer-to-pointer-and-pointer-to-array)讀取[C FAQ,第6部分](http://c-faq.com/aryptr/index.html)。 – 2013-05-07 03:22:31

+0

對不起 - 該鏈接不完全正確。但是如果你搜索,你會發現許多相同問題的例子。 – 2013-05-07 03:27:04

回答

0
int a[20]; 

您在聲明數組a可容納20 INT

int *b=a; 

由於a是數組,a評估爲a(即a的第一個元素)的基地址。所以bint指針指向的第一個元素在陣列a

int *c=&a; 

&a是指被分配給int指針ca地址。但是,這是不好的,因爲&a是陣列的地址(不是陣列的基地址),所以您應該將c定義爲int **(即指向指針的指針)或將其分配給&a[0](即第一個元素的地址數組a)。由於數組被分配了連續的內存,一旦擁有該數組的基地址,就可以通過執行*(b+i)輕鬆訪問數組的其餘元素,其中i是您要訪問的元素的索引。

然而,

int a = 5; 
int *b= a ; // WRONG -- b will not point to the address of variable a, but to the memory location 5, which is what you do not want 
int *c = &a; //CORRECT 
+0

謝謝法案,我明白了。我想知道這裏b = a和c =&a(即。a和&a)之間的區別。 – user2333014 2013-05-07 03:46:41

+0

答案中提到了....'a'計算數組的基地址(當聲明爲一個數組時),但是當它是一個變量時,它將評估變量的值,而不是地址。然而,'&a'總是評估爲'a'的地址。希望澄清它。 – Bill 2013-05-07 04:16:55

+0

'b'指向'a'的第一個元素。在OP代碼中'int * c =&a;'是錯誤的,因爲'&a'具有類型'int(*)[20]'並且是一個指向數組的指針。將它分配給一個'int *'是分配給一個不兼容的指針類型。 – newacct 2013-05-07 05:43:34