บทความนี้จะแสดงวิธีการพิมพ์การจัดเก็บหน่วยความจำของตัวแปรในภาษา C รวมถึงจำนวนเต็ม จำนวนจริง และพอยน์เตอร์
ขั้นตอนการแก้ปัญหา:
- ดึงที่อยู่และขนาดของตัวแปร
- แปลงที่อยู่เป็นตัวชี้ตัวอักขระ (character pointer) เพื่อได้ที่อยู่แบบไบต์
- วนลูปตามขนาดของตัวแปรและพิมพ์ค่าของตัวชี้ที่แปลงแล้ว
ตัวอย่าง
#include <stdio.h>
typedef unsigned char *byte_pointer; // สร้าง byte pointer ด้วย char*
void disp_bytes(byte_pointer ptr, int len) {
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);
}
ผลลัพธ์
05 00 00 00 00 00 00 40 3c fe 22 00 00 00 00 00 05 00 00 00