void * pointer và cách dereference void *. - QuânSysAd's Blog

04 tháng 6 2018

void * pointer và cách dereference void *.

Bản chất trong C. void *không thể dereference một cách trực tiếp mà cần phải được typecast về một type cụ thể trước khi dereference
Ví dụ
#include
int main()
{
int a = 10;
void *ptr = &a;
printf("%d", *(int *)ptr);
return 0;
}
Giải thích:
Trong đoạn trên biến a là type int (integer).
Con trỏ ptr được khai báo là type void lúc này đang trỏ tới địa chỉ của biến a.
Lúc này nếu dereference trực tiếp để lấy giá trị của a thì chương trình sẽ lỗi ngay
printf("%d", *ptr);
Mấu chốt ở chỗ trong C không cho phép dereference từ void type. Lúc này ta sẽ cần typecast về int trước. Để con trỏ ptr từ void type về int type ta dùng toán tử sau:
(int *)ptr. Lúc này con trỏ ptr đang tạm thời về int type. Lúc này ta có thể lấy giá trị của ptr như bình thường bằng cách dùng dấu *.
printf("%d", *(int *)ptr);

Không có nhận xét nào: