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ựcDấ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.
Thử thách
Dễ- Khai báo một con trỏ đến số nguyên có tên
int_ptr, khởi tạo bằngNULL - Khai báo một con trỏ đến ký tự có tên
char_ptr, khởi tạo bằngNULL - Khai báo một con trỏ đến số thực có tên
float_ptr, khởi tạo bằngNULL - In địa chỉ bộ nhớ được lưu trong mỗi con trỏ bằng
printfvớ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;
}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
1Nền tảng về con trỏ
Con trỏ là gì?Khai báo con trỏToán tử lấy địa chỉ (&)Toán tử giải tham chiếu (*)Con trỏ NULLÔn tập: kiến thức cơ bản về con trỏ4Dự án: Công cụ xử lý văn bản đơn giản
Tổng quan dự ánĐếm ký tự2Con trỏ và mảng
Tên mảng dưới dạng con trỏPhần tử mảng và con trỏPhép toán con trỏSo sánh con trỏÔn tập: duyệt mảng bằng con trỏ5Con trỏ và hàm
Truyền theo giá trịTruyền con trỏ vào hàmSửa đổi biến qua con trỏVí dụ kinh điển: hoán đổiTruyền mảng vào hàmÔn tập: đối số con trỏ hàm3Mảng ký tự và chuỗi
Chuỗi dưới dạng mảng charKý tự kết thúc nullNhập chuỗi bằng scanfDùng strlen()Dùng strcpy()Dùng strcat()Dùng strcmp()Ôn tập: các hàm xử lý chuỗi cơ bản6Quản lý bộ nhớ
Bộ nhớ ngăn xếp và bộ nhớ heapCấp phát động với malloc()Dùng sizeof() để cấp phátKiểm tra lỗi cấp phátGiải phóng bộ nhớ với free()Cấp phát với calloc()Ôn tập: Mảng động9Dự án: Nhập thông tin liên hệ đơn giản
Định nghĩa struct ContactHàm tạo liên hệTự luyện tập: Trình biên dịch C online