Ở đây ta sẽ xem cách in ra biểu diễn bộ nhớ của các biến C. Ta sẽ trình bày cho số nguyên, số thực và con trỏ.
Để giải quyết bài toán này, ta thực hiện các bước sau:
- Lấy địa chỉ và kích thước của biến
- Ép kiểu địa chỉ thành con trỏ ký tự để lấy địa chỉ theo byte
- Lặp qua kích thước của biến và in giá trị của con trỏ đã ép kiểu
Ví dụ
#include <stdio.h>
typedef unsigned char *byte_pointer; // tạo con trỏ byte dùng char*
void disp_bytes(byte_pointer ptr, int len) {
// nhận con trỏ byte, in nội dung bộ nhớ
int i;
for (i = 0; i < len; i++)
printf(" %.2x", ptr[i]);
printf("\n");
}
void disp_int(int x) {
disp_bytes((byte_pointer) &x, sizeof(int));
}
void disp_float(float x) {
disp_bytes((byte_pointer) &x, sizeof(float));
}
void disp_pointer(void *x) {
disp_bytes((byte_pointer) &x, sizeof(void *));
}
int main() {
int i = 5;
float f = 2.0;
int *p = &i;
disp_int(i);
disp_float(f);
disp_pointer(p);
disp_int(i);
return 0;
}
Kết quả
05 00 00 00 00 00 00 40 3c fe 22 00 00 00 00 00 05 00 00 00