2017-03-25 7 views
2
coutの値を見てみると
#include <iostream> 

using namespace std; 

int main() { 
    int* z = new int(9); 

    cout << "address: " << z << endl; 
    cout << "value: " << *z << endl; 
    cout << "referance: " << &z << endl; 
    return 0; 
} 

、私は同じアドレスを与えるアドレスや参照を期待していたが、出力はありHERESに何:ポインタ変数、VARの違いと&VAR

address: 0x7fc452c032a0 
value: 9 
referance: 0x7fff5191b8d8 

について興味があるだけその理由は、ヒープ内の変数のアドレスのプレーンな値(z)です。ここで、var(& z)はスタック内にあるポインタ変数のアドレスですか?

enter image description here

+2

'&z 'の'& 'は_address-of_演算子です。 –

+0

'*(&z)'を実行すると、 'z' –

答えて

1

最初にいくつかの基本を説明しましょう。

  • 変数は、私たちが働いている値を保持しているメモリのある場所を参照するために使用される名前です。

  • C/C++で '&'を使用すると、変数のアドレスを取得できます。

  • ポインタは、変数のアドレスを格納する変数です。たとえば、この例では、

    int* z = new int(9); 
    

    を参照しています。変数zは、値9 [new int(9)]のアドレスを格納します。

今、最終的にこの変数は、メモリ内のいくつかの場所に格納する必要があり、これは、アンパサンド(&)を使用してアクセスすることができます。

&z //gives the address of the pointer to value 9 (address of variable z). 

これは、ポインターとポインター(マルチレベルポインター)へのポインターが同じように機能します。

+0

にタイプミスができます。それを修正しましょう。ナイスキャッチ。 –

+0

int 9がアドレスzまたはアドレス&zに格納されていますか? –

+0

私はこのようにします。 値9のアドレスは変数Zに格納されます。 'int x = new int(9); int * z =&x; ' –

3

&zがポインタあなたが割り当てられたアドレスnew int(9)を保存int * zアドレスを指定です:ここで

で視覚化したものです。

ポインタzと値9は、メモリ内の2つの異なる場所に格納されます。

ここ参照、唯一住所がのいずれかの概念はありません。声明の上

1
int* z; 

int型宣言のポインタ変数を意味します。声明の上

int* z = new int(); 

アドレスが動的にint型の変数をポインタに割り当てられている意味します。

int* z = new int(9); 

上記の文は、値9が動的に割り当てられて格納されていることを示しています。コードの線の上

cout << "address: " << z << endl; 

ポインタ変数zのアドレスを伝えます。コードの行の上

cout << "value: " << *z << endl; 

変数zに格納された値を伝えます。

cout << "referance: " << &z << endl; 

上記のコード行は、動的に作成された変数のアドレスを示します。

関連する問題