Variabel adalah konstruk logis yang mengarah ke maksud suatu algoritma, sedangkan lokasi memori adalah konstruk fisik yang menggambarkan operasi komputer. Secara umum, untuk menjalankan program ada pemetaan (kompiler dihasilkan) antara gagasan logis dari variabel dan penyimpanan komputer.
(Bahkan dalam bahasa assembly kami memiliki gagasan tentang variabel (logis) pergi ke algoritma dan niat, dan lokasi memori (fisik), meskipun mereka lebih digabungkan dalam perakitan.)
Variabel adalah konsep tingkat tinggi (er). Variabel mewakili salah satu yang tidak diketahui (seperti dalam matematika, atau tugas pemrograman) atau place-holder yang dapat diganti dengan nilai (seperti dalam pemrograman: parameter).
Lokasi memori adalah konsep level rendah (er). Lokasi memori dapat digunakan untuk menyimpan nilai, kadang-kadang, untuk menyimpan nilai variabel. Namun, register CPU adalah cara lain untuk menyimpan nilai beberapa variabel. Register CPU juga merupakan lokasi penyimpanan level rendah (er), tetapi mereka bukan lokasi memori karena mereka tidak memiliki alamat, hanya nama.
Dalam beberapa hal, variabel adalah mekanisme abstraksi untuk mengekspresikan maksud program, sedangkan lokasi memori adalah entitas fisik dari lingkungan pemrosesan yang menyediakan penyimpanan & pengambilan.
Pertanyaan 003: Benarkah pointer disimpan di dalam lokasi memori 0x23452? Mengapa?
Kita tidak bisa mengatakan sebelumnya. Hanya karena ada nilai di sana yang akan berfungsi sebagai alamat, bukan berarti alamat itu, itu bisa berupa bilangan bulat (desimal) 144466, sebagai gantinya. Kami tidak dapat membuat asumsi pada interpretasi nilai hanya berdasarkan pada bagaimana mereka muncul secara numerik.
Pertanyaan 004: Benarkah pointer disimpan di dalam lokasi memori 0x23452? Mengapa?
Ini memang pertanyaan aneh. Namun mereka mengharapkan beberapa asumsi berdasarkan kotak, mari kita perhatikan bahwa alamat bertambah 1 untuk setiap kotak. Di komputer modern mana pun, itu berarti bahwa setiap kotak dapat menampung kemampuan byte byte telah menjadi norma selama beberapa dekade sekarang. Namun byte hanya 8-bit dan dapat berkisar dari 0 hingga 255 (untuk nilai yang tidak ditandatangani); namun mereka menunjukkan nilai yang jauh lebih besar disimpan dalam salah satu alamat ini, sangat mencurigakan. (Ini bisa bekerja jika ini adalah mesin yang ditujukan untuk kata-kata, tetapi tidak dikatakan demikian, dan, beberapa mesin saat ini, meskipun beberapa mesin pendidikan begitu.)
Berdasarkan empat kartu flash yang saya tunjukkan pada Anda semua, saya akan mendefinisikan pointer dengan cara yang sedikit berbeda:
Pointer adalah lokasi memori yang nilainya adalah alamat memori lokasi memori lain.
Meskipun ada situasi di mana pemikiran ini benar, Anda mencampur metafora di sini. Gagasan suatu variabel mengarah ke algoritma dan tujuannya - tidak perlu mengasumsikan semua variabel memiliki lokasi memori. Beberapa variabel (terutama array) memiliki lokasi memori karena lokasi memori mendukung pengalamatan (sedangkan register CPU hanya bisa dinamai tidak diindeks).
Untuk eksekusi, ada pemetaan logis antara variabel & pernyataan dan lokasi memori prosesor & urutan instruksi prosesor. Variabel yang nilainya tidak pernah berubah (misalnya konstanta) bahkan tidak perlu memerlukan lokasi memori, karena nilainya dapat direproduksi sesuka hati (mis. Sesuai kebutuhan untuk urutan kode yang dihasilkan oleh kompiler).
a
,0x23453
.nil
dll barang-barang di dalamnya adalah nilai-nilai. Itu mungkin tampak jelas bagi Anda, tetapi saya tidak akan merasa nyaman memberikan jawaban tegas untuk pertanyaan-pertanyaan itu tanpa melihat bagaimana bidang-bidang itu didefinisikan. Benar-benar tidak ada cara untuk mengetahui apakaha
pada gambar kedua adalah karakter, string (jika mereka berbeda), atau nama variabel. Jika itu adalah string, maka apakahnil
juga string? Atau nilai "null"?