請告訴我去年2個語句之間的區別:數組名作爲指針和數組名與與運營商
int a[20];
int *b=a;
int *c=&a;
我覺得都是一樣的,但在最近的一次採訪面試官熱衷於知道我沒差別不知道。
有人請詳細說明一下。
我到這個職位,但不明白數組相關部分: Function pointers and address of a function
請告訴我去年2個語句之間的區別:數組名作爲指針和數組名與與運營商
int a[20];
int *b=a;
int *c=&a;
我覺得都是一樣的,但在最近的一次採訪面試官熱衷於知道我沒差別不知道。
有人請詳細說明一下。
我到這個職位,但不明白數組相關部分: Function pointers and address of a function
int a[20];
您在聲明數組a
可容納20
INT
int *b=a;
由於a
是數組,a
評估爲a
(即a
的第一個元素)的基地址。所以b
是int
指針指向的第一個元素在陣列a
int *c=&a;
&a
是指被分配給int
指針c
的a
地址。但是,這是不好的,因爲&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
謝謝法案,我明白了。我想知道這裏b = a和c =&a(即。a和&a)之間的區別。 – user2333014 2013-05-07 03:46:41
答案中提到了....'a'計算數組的基地址(當聲明爲一個數組時),但是當它是一個變量時,它將評估變量的值,而不是地址。然而,'&a'總是評估爲'a'的地址。希望澄清它。 – Bill 2013-05-07 04:16:55
'b'指向'a'的第一個元素。在OP代碼中'int * c =&a;'是錯誤的,因爲'&a'具有類型'int(*)[20]'並且是一個指向數組的指針。將它分配給一個'int *'是分配給一個不兼容的指針類型。 – newacct 2013-05-07 05:43:34
重複數百次以上。 – 2013-05-07 03:22:01
示例:[指針指針和數組指針之間的區別?](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
對不起 - 該鏈接不完全正確。但是如果你搜索,你會發現許多相同問題的例子。 – 2013-05-07 03:27:04