Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Khác biệt "void *" giữa C và C++


Phần này xem khác biệt con trỏ void trong C và C++. Cả hai đều là con trỏ void nhưng trong C, con trỏ void có thể gán cho bất kỳ kiểu con trỏ nào, còn C++ thì không. C++ phải ép kiểu tường minh khi gán.

Ví dụ sau chạy được trong C:

void *p;
int *int_ptr = p;

Đoạn này chạy tốt trong C. Nếu dùng malloc() cấp phát bộ nhớ, có thể ép kiểu tường minh, nhưng nếu không ép cũng được. malloc() trả về con trỏ void.

int *int_ptr = malloc(sizeof(int) * 10);

Con trỏ void trả về được chuyển ngầm sang con trỏ int.

Nếu muốn chương trình chạy cả C và C++, phải ép kiểu tường minh:

void *p;
int *int_ptr = (int *) p;
int *arr_ptr = (int *) malloc(sizeof(int) * 10);