2012-02-01 10 views
3

だから私は、次のコードをしている:私は2つの最後の行で同じことをC++:ポインタ値&アドレス

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

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

をやっているでしょうか?そうでない場合は、なぜ、いつ、私はこれらの方法のそれぞれを使うべきですか?

EDIT#1:私はそれらの2つを勘所に置き、私は同じ結果を得ました。私はそれらを差別化する方法を知らない。

+1

関連を見ているだけの理由:http://stackoverflow.com/質問/ 1641957/is-array-name-a-c-in-c –

+0

ありがとうございました! – Yokhen

答えて

3

これは基本的に同じです。左辺値として使用すると配列は最初の要素へのポインタになりますので、式_password = password;は暗黙的に_password = &password[0];に変換されます

+0

私は、その答えは私の質問を参照してください。 – Yokhen

3

はい、これらの2つの例は同じです。配列passwordは、2番目の例の最初の要素へのポインタに減衰するため、意味的には同じです。

0

同じ出力を得る理由は、両方が同じリテラルを指しているからです同じアドレス、しかし)。

は、あなたがこれを持っていたとします

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

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

あなたが_userLoginNameと_passwordのための異なる出力を持っていると思います。

実際には、配列名はポインタです。したがって、userLoginNameは、char配列の最初の要素へのポインタです。

したがって、[]演算子です。 arrと呼ばれる配列があるとします。 arr [x]は実際には*(arr + x)です。ポインターを指定された量だけ移動して、望むものを指し示し、逆参照します。

ポインタを割り当てるあなたの二つの方法は、彼らはしかし、同じアレイ上で動作している場合は、基本的に同じことをしていますが、要素0

+0

これは、配列がポインタであると言う部分を除いて、かなり良いです。 –

+0

すべてが素晴らしいですが、それが意図だったので、私はそれらを平等にしました。私は '_password = password; 'の何かをするだけで値をコピーするか、同じアドレスを参照するかどうか疑問に思っていました。したがって、異なる名前で同じ内容の私の2つの例です。 – Yokhen

+0

データ構造体としての配列はポインタではありませんが、関連するラベルの表現はポインタです。ラベルの構造は、いくつかのインスタンスでは単なるポインタ以上のものがありますが、mallocを使用して配列Cスタイルを作ることができます。 – Pochi

関連する問題