Menu
CoddyTech

Khai báo con trỏ

Thuộc phần Logic và luồng điều khiển trong hành trình C của Coddy. Bài học 2 trên 63.

Giờ bạn đã hiểu con trỏ là gì, hãy cùng tìm hiểu cách tạo chúng. Khai báo một biến con trỏ cần tuân theo cú pháp cụ thể để cho trình biên dịch biết con trỏ sẽ trỏ đến kiểu dữ liệu nào.

Cú pháp cơ bản để khai báo con trỏ là: data_type *pointer_name;

int *ptr;        // Khai báo một con trỏ đến số nguyên
char *ch_ptr;    // Khai báo một con trỏ đến ký tự
float *f_ptr;    // Khai báo một con trỏ đến số thực

Dấu hoa thị (*) khiến đây trở thành khai báo con trỏ. Nó cho trình biên dịch biết rằng biến này sẽ lưu một địa chỉ bộ nhớ, chứ không phải giá trị dữ liệu thực tế. Khi khai báo int *ptr;, bạn đang nói rằng "ptr là một con trỏ có thể lưu địa chỉ của một biến số nguyên."

Bạn nên khởi tạo con trỏ bằng NULL nếu chúng chưa trỏ đến địa chỉ bộ nhớ hợp lệ. Việc này giúp chúng không trỏ đến các vị trí bộ nhớ ngẫu nhiên: int *ptr = NULL;

Khi in địa chỉ con trỏ bằng printf, hãy dùng định dạng %p. Người ta thường khuyên nên ép kiểu con trỏ sang (void *) để đảm bảo tính tương thích và định dạng chính xác: printf("%p", (void *)ptr);

Lưu ý rằng kiểu dữ liệu đứng trước dấu hoa thị cho biết con trỏ sẽ trỏ đến loại dữ liệu nào. Điều này rất quan trọng vì mỗi kiểu dữ liệu chiếm một lượng bộ nhớ khác nhau, và trình biên dịch cần biết thông tin này để quản lý bộ nhớ đúng cách.

challenge icon

Thử thách

Dễ
Viết một chương trình C minh họa cú pháp khai báo con trỏ đúng. Chương trình của bạn cần:
  1. Khai báo một con trỏ đến số nguyên có tên int_ptr, khởi tạo bằng NULL
  2. Khai báo một con trỏ đến ký tự có tên char_ptr, khởi tạo bằng NULL
  3. Khai báo một con trỏ đến số thực có tên float_ptr, khởi tạo bằng NULL
  4. In địa chỉ bộ nhớ được lưu trong mỗi con trỏ bằng printf với mã định dạng %p. Khi in, hãy ép kiểu con trỏ thành (void*) để đảm bảo định dạng chính xác, ví dụ: printf("Label: %p\n", (void*)ptr);

Đầu ra của bạn cần hiển thị địa chỉ của ba con trỏ theo định dạng sau:

Integer pointer: [address]
Character pointer: [address]  
Float pointer: [address]

Lưu ý rằng địa chỉ bộ nhớ thực tế sẽ thay đổi, nhưng định dạng và nhãn phải khớp chính xác với phần minh họa ở trên.

Tự làm thử

#include <stdio.h>

int main() {
    // TODO: Khai báo các con trỏ tại đây
    
    
    // TODO: In ra địa chỉ của các con trỏ theo định dạng yêu cầu
    
    
    return 0;
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch C online