2012-02-01 142 views
3

所以我有以下代碼:C++:指針值地址

char userLoginName[] = "Smith"; 
char password[] = "Smith"; 
char *_userLoginName, *_password; 

_userLoginName = &userLoginName[0]; //1st way 
_password = password; //2nd way 

我會做同樣的事情在最後兩行?如果不是,那麼爲什麼以及何時會使用這些方法?

編輯#1:我把他們兩個關於cout和我有同樣的結果。我不知道如何區分它們。

+1

相關:http://stackoverflow.com/問題/ 1641957/is-array-name-a-pointer-in-c – 2012-02-01 00:45:35

+0

多謝先生! – Yokhen 2012-02-01 01:09:21

回答

3

它們基本相同。用作右值的數組衰減爲指向第一個元素的指針,因此表達式_password = password;隱式轉換爲_password = &password[0];

+0

我明白了,那就回答我的問題。 – Yokhen 2012-02-01 01:10:25

3

是的,這兩個例子是相同的。數組password衰減爲第二個示例中其第一個元素的指針,因此它們在語義上相同。

0

您爲兩者獲得相同輸出的原因是它們都指向相同的文字(不完全是儘管如此)。

假設你有如下:

char userLoginName[] = "Smithlogin"; 
char password[] = "Smithpass"; 
char *_userLoginName, *_password; 

_userLoginName = &userLoginName[0]; //1st way 
_password = password; //2nd way 

你必須爲_userLoginName和_password不同的輸出。

數組名實際上是一個指針。所以userLoginName是一個指向字符數組的第一個元素的指針。

所以對於[]運算符。假設你有和數組叫arr。 arr [x]實際上是*(arr + x)。它將指針移動指定的數量以指向您想要的並取消引用它。

您的兩個分配指針的方法基本上做,如果他們在同一個陣列上運行,雖然同樣的事情,但僅僅是因爲你正在尋找元素0

+0

所有這一切都非常好,除了你說數組是一個指針的部分,它不是。 – 2012-02-01 00:48:21

+0

一切都很棒,但我讓他們平等,因爲那是意圖。我想知道是否執行'_password = password;'只會複製值或者引用相同的地址。因此,我用兩個不同名稱但內容相同的例子。 – Yokhen 2012-02-01 01:05:35

+0

作爲數據結構的數組不是指針,而是關聯標籤的表示形式是指針。在某些情況下,標籤的結構不僅僅是一個指針,而且你可以使用malloc創建一個數組C風格。 – Pochi 2012-02-01 09:10:42