Void trong c là gì

Ở bài học trước, bạn đã được giới thiệu về BIẾN THAM CHIẾU [Reference variables] trong C++.

Hôm nay, chúng ta sẽ tiếp tục tìm hiểu về những kiến thức liên quan đến con trỏ trong C++, cụ thể là Con trỏ void [Void pointers].

Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về:

  • CON TRỎ TRONG C++ [Pointer]

Trong bài ta sẽ cùng tìm hiểu các vấn đề:

  • Con trỏ void [void pointer]
  • Ứng dụng con trỏ void
  • Hạn chế sử dụng con trỏ void

Con trỏ void [void pointer]

Bạn nên luôn luôn ghi nhớ rằng một con trỏ truyền tải hai thông tin:

  • Kiểu dữ liệu trỏ đến [int, double, ...] quy định cách truy xuất dữ liệu của vùng nhớ.
  • Địa chỉ của vùng nhớ mà nó trỏ tới quy định cụ thể nơi bạn có thể truy xuất dữ liệu.

Kiểu dữ liệu đang được trỏ đến là kiểu của con trỏ [int *, double *, ...], trong khi địa chỉ của dữ liệu là giá trị thực tế chứa trong biến con trỏ.

Vì vậy, một con trỏ void [void *] là một con trỏ không chỉ định thông tin kiểu dữ liệu. Nó cho bạn biết dữ liệu được lưu ở đâu, nhưng nó không cho bạn biết cách truy xuất dữ liệu đó.

Con trỏ void còn được gọi là con trỏ tổng quát, là một kiểu con trỏ đặc biệt có thể trỏ đến các đối tượng của bất kỳ kiểu dữ liệu nào!

Con trỏ void được khai báo giống như một con trỏ bình thường, sử dụng từ khóa void làm kiểu con trỏ:

void *ptr; // ptr là con trỏ void

Con trỏ void có thể trỏ đến các đối tượng của bất kỳ kiểu dữ liệu nào:

int n; float f; double d; void *ptr; ptr = &n; // ok ptr = &f; // ok ptr = &d; // ok

Tuy nhiên, con trỏ void không xác định được kiểu dữ liệu của vùng nhớ mà nó trỏ tới, chúng ta không thể truy xuất trực tiếp nội dung thông qua toán tử dereference [*] được. Vì vậy, con trỏ kiểu void cần phải được ép kiểu một cách rõ ràng sang con trỏ có kiểu dữ liệu khác trước khi sử dụng toán tử dereference [*].

int value = 10; void *voidPtr = &value; // cout

Chủ Đề