Biến là một cấu trúc logic đi theo mục đích của thuật toán, trong khi vị trí bộ nhớ là cấu trúc vật lý mô tả hoạt động của máy tính. Nói chung, để thực hiện một chương trình, có ánh xạ (trình biên dịch được tạo) giữa khái niệm logic của một biến và lưu trữ của máy tính.
(Ngay cả trong ngôn ngữ lắp ráp, chúng ta có một khái niệm về các biến (logic) sẽ chuyển sang thuật toán và mục đích và các vị trí bộ nhớ (vật lý), mặc dù chúng được tập hợp nhiều hơn trong quá trình lắp ráp.)
Một biến là một khái niệm cấp cao (er). Một biến đại diện cho một ẩn số (như trong toán học, hoặc gán lập trình) hoặc một trình giữ chỗ có thể được thay thế bằng một giá trị (như trong lập trình: tham số).
Một vị trí bộ nhớ là một khái niệm cấp thấp (er). Một vị trí bộ nhớ có thể được sử dụng để lưu trữ một giá trị, đôi khi, để lưu trữ giá trị của một biến. Tuy nhiên, một thanh ghi CPU là một cách khác để lưu trữ giá trị của một số biến. Các thanh ghi CPU cũng là các vị trí lưu trữ ở mức thấp (er), nhưng chúng không phải là các vị trí bộ nhớ vì chúng không có địa chỉ, chỉ có tên.
Theo một nghĩa nào đó, một biến là một cơ chế trừu tượng để thể hiện ý định của chương trình, trong khi vị trí bộ nhớ là một thực thể vật lý của môi trường xử lý cung cấp lưu trữ và truy xuất.
Câu 003: Có đúng là một con trỏ được lưu trữ bên trong vị trí bộ nhớ 0x23452? Tại sao?
Chúng tôi không thể nói chắc chắn. Chỉ vì có một giá trị ở đó sẽ hoạt động như một địa chỉ, không có nghĩa đó là địa chỉ đó, thay vào đó, nó có thể là số nguyên (thập phân) 144466. Chúng ta không thể đưa ra các giả định về việc giải thích các giá trị chỉ dựa trên cách chúng xuất hiện dưới dạng số.
Câu hỏi 004: Có đúng là một con trỏ được lưu trữ bên trong vị trí bộ nhớ 0x23452? Tại sao?
Đây thực sự là một câu hỏi kỳ lạ. Họ mong đợi một số giả định dựa trên các hộp, tuy nhiên, hãy lưu ý rằng các địa chỉ tăng thêm 1 cho mỗi hộp. Trong bất kỳ máy tính hiện đại nào, điều đó có nghĩa là mỗi hộp có thể chứa một địa chỉ byte - byte là tiêu chuẩn trong nhiều thập kỷ nay. Tuy nhiên, một byte chỉ có 8 bit và có thể nằm trong khoảng từ 0 đến 255 (đối với các giá trị không dấu); Tuy nhiên, chúng cho thấy một giá trị lớn hơn nhiều được lưu trữ trong một trong những địa chỉ này, vì vậy rất đáng ngờ. (Điều này có thể hoạt động nếu đây là một máy có địa chỉ từ, nhưng nó không nói lên điều đó, và, ngày nay có rất ít máy móc, mặc dù một số máy giáo dục là như vậy.)
Dựa trên bốn thẻ ghi chú tôi đã chỉ cho tất cả các bạn, tôi sẽ xác định các con trỏ theo một cách hơi khác:
Con trỏ là một vị trí bộ nhớ có giá trị là địa chỉ bộ nhớ của một vị trí bộ nhớ khác.
Trong khi có những tình huống mà suy nghĩ này là chính xác, bạn đang trộn lẫn các ẩn dụ ở đây. Khái niệm về một biến đi đến thuật toán và mục đích của nó - không cần phải giả sử tất cả các biến có vị trí bộ nhớ. Một số biến (đặc biệt là mảng) có vị trí bộ nhớ vì vị trí bộ nhớ hỗ trợ địa chỉ (trong khi các thanh ghi CPU chỉ có thể được đặt tên không được lập chỉ mục).
Để thực thi, có một ánh xạ logic giữa các biến & câu lệnh và vị trí bộ nhớ của bộ xử lý & các chuỗi lệnh của bộ xử lý. Một biến có giá trị không bao giờ thay đổi (ví dụ: hằng số) thậm chí không nhất thiết yêu cầu vị trí bộ nhớ, vì giá trị có thể được sao chép theo ý muốn (ví dụ như cần thiết cho các chuỗi mã do trình biên dịch tạo ra).
a
,0x23453
.nil
vv những thứ bên trong chúng là các giá trị. Điều đó có vẻ rõ ràng đối với bạn, nhưng tôi sẽ không thoải mái đưa ra câu trả lời quyết định cho những câu hỏi đó mà không cần xem các trường đó được định nghĩa như thế nào. Thực sự không có cách nào để biết nếua
trong hình ảnh thứ hai là một ký tự, một chuỗi (nếu chúng khác nhau) hoặc tên của một biến. Nếu nó là một chuỗi, thì đónil
cũng là một chuỗi? Hoặc một giá trị "null"?