0

C で次のコードがあるとします。

int x = 1025;
int *y = &x;
  1. Yとは何ですか?ポインタ変数 y のメモリ内のアドレスですか?
  2. ポインタ変数 y とは何ですか? 変数 x のアドレスを保持していますか?
  3. &xとは何ですか? 変数 x 自体のメモリ内のアドレスですか、それともその値のアドレス 1025 ですか?
  4. 変数 x は何ですか? その値のアドレス、1025 ですか?
  5. Yとは何ですか?1025 = 変数 x のアドレスですか?

そして大きい方…

&y を印刷すると y のアドレスが表示され、&x を印刷すると x のアドレスが表示されますが、x/*y を印刷すると 1025 が印刷されるだけです。どうすれば 1025 のアドレスを印刷できますか?

これらの質問のいくつかが本当に明白に思える場合は申し訳ありませんが、解決しようとしているポインタをいじって多くの混乱がありました.

[編集] 皆さん、間違いを見つけました。私は、変数 x が 1025 を表す一連のバイトのアドレスを保持すると考えていました。Java から C への標準的な不適合。回答ありがとうございました

4

6 に答える 6

0
  1. まさに。ポインタは変数であり、変数として独自のメモリ アドレスを持ちます。

  2. はい、ポインタ y は変数 x のアドレスで初期化されます

  3. &x は変数 x のアドレスです。違いをはっきりと確認したい場合は、印刷することができます。

  4. 変数 x は、メモリ内の特定のアドレスに保存されます。これは、変数が初期化される値 (この場合は 1025) とは異なります。

ここでも、違いを確認するために、x のアドレスとその値を出力してみてください。

int x = 1025;
printf("%p", &x); //prints the address of x
printf("%d", x); //prints the value assigned to x

最後の質問: *y は変数ポインターであり、間接参照演算子 * です。これは、y が指す変数に保存された値を取得することを意味します。

実際に x/(*y) を印刷すると、1025/1025 になるため、結果として 1 が得られるはずです。

于 2013-09-07T21:07:35.030 に答える
0

はい、はい、アドレス ( &「のアドレス」演算子と呼ばれるのはそのためです)、いいえ、いいえ。

C で変数をどのように考える必要があるかを次に示します。変数は、値を書き込むことができる紙切れです。(値のタイプは、紙に示されているタイプと一致する必要があります。) すべての紙切れは、アドレスと呼ばれるページ番号でアドレス指定できるようにノートにまとめられています。

ポインター変数は、ページ番号を書き込む特別な紙です。後でポインターをチェックして、ポインターが指している紙片を確認し、代わりにそれを見ることができます。

このことから、次のことがわかります。

  1. 変数にはアドレスがあります。ページ番号が書かれた紙です。
  2. 値にはアドレスがありません。一枚の紙ではなく、一枚の紙に書き込める数字のようなものです。1025 のような数字にはページ番号はありませんが、呼び出したページに「1025」と書くとx、1025 が書かれたページ番号を持つページが存在します。

値のアドレスを取得できないことを確信するには、次のようなことを試してください&1025。コンパイラはそれを許可しません。

于 2013-09-07T20:28:19.993 に答える