2

なぜですか

int i;
int *p = &i;

そうです、その間

int i, *p;
*p = &i;

間違っている?

*宣言 ( int *p = &i) と式 ( ) で使用される演算子に違いはあります*p = &iか?

4

2 に答える 2

3

2 番目のコード ブロックでは、次のようになります。

int i, *p;
*p = &i;

次のように修正できます。

int i, *p;
p = &i;    

pは依然として an へのポインタとして宣言されていますが、tointのアドレスを格納したいとします。ip

あなたのコードでは、 (初期化していないため)を指すメモリ内の領域へ*p = &iのアドレスを格納します。ip

于 2013-07-14T23:48:21.233 に答える
2

はい、違いがあります。最初の形式*は型定義の一部ですint *

2 番目の形式では、単項逆参照演算子です。また、2 番目の式にもエラーがあります。ポインターに代入する場合、逆参照する必要はありません。

(*p)typeintp評価され、 type に評価されint *ます。&itype に評価されint *ます。したがって、int 変数 i のアドレスをポインター p に割り当てると、p=&i;

于 2013-07-14T23:46:37.303 に答える