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 ngayprintf("%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:
Đăng nhận xét