変数は、アルゴリズムの意図に沿った論理構造であり、メモリ位置はコンピューターの動作を記述する物理構造です。一般的に、プログラムを実行するために、変数の論理的概念とコンピューターのストレージとの間に(コンパイラー生成)マッピングがあります。
(アセンブリ言語でも、(論理)変数がアルゴリズムとインテントになり、(物理)メモリ位置の概念がありますが、アセンブリではより混同されます。)
変数は高レベルの概念です。変数は、不明(数学、プログラミングの割り当てなど)か、値で置き換えることができるプレースホルダー(プログラミングの場合:パラメーター)のいずれかを表します。
メモリロケーションは、低レベルの概念です。メモリの場所は、変数の値を格納するために値を格納するために使用できます。ただし、CPUレジスタは、いくつかの変数の値を保存する別の方法です。CPUレジスタも低レベルのストレージ場所ですが、アドレスがなく、名前だけがあるため、メモリの場所ではありません。
ある意味では、変数はプログラムの意図を表現するための抽象化のメカニズムであり、メモリの場所はストレージと検索を提供する処理環境の物理的なエンティティです。
質問003:ポインターがメモリ位置0x23452内に保存されているのは本当ですか?どうして?
はっきりと言うことはできません。アドレスとして機能する値がそこにあるからといって、それがそのアドレスであることを意味するのではなく、代わりに整数(10進数)144466である可能性があります。私たちは、単に数値がどのように現れるかに基づいて、値の解釈を仮定することはできません。
質問004:ポインターがメモリ位置0x23452内に保存されているのは本当ですか?どうして?
これは確かに奇妙な質問です。彼らはボックスに基づいていくつかの仮定を期待していますが、アドレスが各ボックスごとに1ずつ増加することに注意しましょう。現代のコンピュータでは、それは各ボックスがバイトを保持できることを意味します。バイトのアドレス指定は、数十年前から標準でした。ただし、バイトは8ビットのみで、0〜255の範囲で指定できます(符号なしの値の場合)。しかし、これらのアドレスの1つに格納されている値ははるかに大きいため、非常に疑わしいです。(これがワードアドレスマシンである場合、これは機能しますが、それは言わず、一部の教育用マシンはそうですが、今日はほとんどありません。)
すべてを紹介した4つのフラッシュカードに基づいて、少し異なる方法でポインターを定義します。
ポインタは、値が別のメモリ位置のメモリアドレスであるメモリ位置です。
この考え方が正しい状況もありますが、ここでは比phorを混ぜています。変数の概念はアルゴリズムとその意図に影響します—すべての変数がメモリ位置を持っていると仮定する必要はありません。一部の変数(特に配列)にはメモリロケーションがあります。これは、メモリロケーションがアドレス指定をサポートしているためです(CPUレジスタはインデックスなしでのみ名前を付けることができます)。
実行のために、変数とステートメントとプロセッサのメモリ位置とプロセッサ命令シーケンスの間には論理的なマッピングがあります。値が決して変化しない変数(定数など)は、値を自由に再現できるため(たとえば、コンパイラによって生成されたコードシーケンスの必要に応じて)、必ずしもメモリ位置を必要としません。
a
、0x23453
。nil
等それらの中のものは値です。それはあなたには自明のように思えるかもしれませんが、これらのフィールドがどのように定義されているかを見ずに、これらの質問に決定的な答えを出すのは気に入らないでしょう。a
2番目の画像が文字、文字列(異なる場合)、または変数の名前であるかどうかを実際に知る方法はありません。文字列の場合、文字列でnil
もありますか?または「null」値?