2

これら2つは同等ですか?

int a=10;
int *p=a; 

AND

int a=10;
int *p;
p=&a;

どちらの場合もpはaのアドレスを保持しますか!?

4

5 に答える 5

5

最初のケースでは、の値は(アドレスを格納する)にaコピーされるため、アドレス10を指します。pp

2番目のケースではp、のアドレスを指しますa

3番目のケースがあります:

int a = 10;
int *p = malloc(sizeof(int));
*p = 10;

この場合、の値は(によって予約された)aが指すアドレスにコピーされます。pmalloc()

于 2012-08-30T19:35:55.977 に答える
3

最初のケースでは

int a=10;
int *p=a;

変数 a に含まれる値は、変数 p に入れられます。したがって、変数 p の値は 10 です。

2番目のケースでは

int a=10;
int *p;
p=&a;

変数 a の値は 10 で、変数 p の値は a のアドレスです。

最初のケースでは、変数 p が int へのポインターとして宣言されていても、変数 p に入れられる値は、変数 a の値、つまり値 10 です。2 番目のケースでは、変数のアドレスを入れています。 a を変数 p に代入します。

于 2012-08-30T19:40:58.860 に答える
2

試す:

int main()
{
    int a=10;
    int *p=a; 
}

次にコンパイルします。

> g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:4: error: invalid conversion from ‘int’ to ‘int*’

a はポインターではないため、有効な C++ ではありません。型情報がもう少し緩いCはこれを可能にします。しかし、あなたは文字通りあなたが求めるものを手に入れます。の値はp( a10) の値です。アドレス 10 へのポインターpも同様です (それが有効なアドレスであるかどうかは実装定義です)。

2 番目のバージョンは両方の言語で有効です。
のアドレスを取得するためa、タイプは への割り当てに適していpます。その結果、 は をp指しaます。

于 2012-08-30T19:52:02.033 に答える
2

技術的に正しいのは 2 番目のケースだけです。最初のケースでは、 のa`p˙ に代入するので、整数をポインターに代入します。うまくいくかもしれませんが、そうである必要はありません。

a2 番目のケースでは、 toのアドレスp、つまり anint *int変数に正しく割り当てます。これで問題ありません。

変数がポインターとして宣言されている場合でも、コンパイラーは右側の式のアドレスを自動的に取得しないことに注意してください (場合によっては、ポインターリテラルなどでは単に意味をなさないためです... )

于 2012-08-30T19:39:47.167 に答える
0

ポインターが指すアドレスを持っている必要があり、値がそのアドレスに移動する必要があるため、最初のケースは正しくありません。最初のケースでは、値は指定されていないアドレスに移動するため、エラーになります。

2 番目のケースでは、ポインターは最初に変数のアドレスを指し始めます。したがって、正しい値を含むアドレスを指します。

于 2012-08-31T16:13:09.713 に答える