これはかなり込み入った質問になるでしょうが、ポインタについて学び始めて以来、プログラムの実行時に舞台裏で何が起こるかについて非常に興味がありました。
私の知る限り、コンピュータのメモリは一般的に、個々のバイトに均等に分割された長いメモリの帯と考えられています。確かに、次のような写真はそのような比喩を呼び起こします。
私が疑問に思っていることの 1 つは、メモリ アドレス自体が何を表しているのかということです。メモリ アドレスが 8 桁の 16 進数値 (例: 00EB5748) として表示されるのは偶然ではないと確信しています。どうしてこれなの?
さらに、変数 x を宣言すると、メモリ レベルで何が起こっているのでしょうか。コンパイラは、データ ストレージ用にランダム アドレス (+ 変数の型に必要な連続したアドレスの数) を予約しているだけですか?
ここで、x が 2 バイトのメモリ (つまり、0 から 65536 の範囲の値) を占有する unsigned int であるとします。x = 12 と宣言すると、何が起こっているのでしょうか? 私が 12 に等しくしているのは何ですか? 私が概念図を描くとき、私は通常、一見何も占有していないように見える変数 (x) を指すアドレス (&x など) のボックスを持っています。
では、バイナリ レベルで何が起こっているのでしょうか。アドレス 00EB5748 は 111010110101011101001000 として扱われ、どこかに 12 の値が格納されていますか、それとも 1100 ですか?
ほとんどの場合、私の混乱と好奇心は、メモリ アドレスと実際に宣言されている値 (例: 12、'a'、-355.2) の関係に起因しています。別の例として、アドレス 00EB5748 が、ASCII チャートによると値が 115 である char 's' を指しているとします。メモリ内のその位置で適切な 1 と 0 を反転させることによって、値 115 を 1 バイトに格納する位置を記述するアドレスですか?