Toán tử giải tham chiếu (*)
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 4 trên 63.
Bây giờ bạn đã biết cách lưu địa chỉ vào con trỏ, bạn cần học cách truy cập giá trị thực tế được lưu tại địa chỉ bộ nhớ đó. Toán tử giải tham chiếu (*) cho phép bạn «đi theo» con trỏ để lấy giá trị mà nó trỏ đến.
Khi đặt toán tử * trước một biến con trỏ, bạn truy cập giá trị được lưu tại địa chỉ bộ nhớ mà con trỏ đang giữ. Hãy hình dung như thể bạn đang nói: "cho mình biết bên trong căn phòng ở địa chỉ này có gì".
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // In ra 25, giá trị của ageĐiều quan trọng là hiểu rằng dấu hoa thị (*) có hai ý nghĩa khác nhau trong C. Khi khai báo một con trỏ như int *ptr;, dấu hoa thị cho biết ptr là một con trỏ. Khi dùng với một con trỏ đã có như *ptr, dấu hoa thị giải tham chiếu con trỏ để truy cập giá trị mà nó trỏ đến.
Toán tử giải tham chiếu rất cần thiết vì nó hoàn thiện chu trình con trỏ: bạn có thể lưu một địa chỉ vào con trỏ bằng &, rồi lấy giá trị tại địa chỉ đó bằng *. Nhờ vậy, bạn có thể gián tiếp truy cập và sửa đổi các biến thông qua địa chỉ bộ nhớ của chúng.
Thử thách
DễViết một chương trình C minh họa đầy đủ quy trình làm việc với con trỏ: khai báo, gán địa chỉ và giải tham chiếu. Chương trình của bạn cần:
- Khai báo một biến số nguyên tên là
valuevà khởi tạo biến với giá trị 75 - Khai báo một biến số thực tên là
pricevà khởi tạo biến với giá trị 19.99 - Khai báo một con trỏ đến số nguyên tên là
value_ptr - Khai báo một con trỏ đến số thực tên là
price_ptr - Dùng toán tử lấy địa chỉ để gán địa chỉ của
valuechovalue_ptr - Dùng toán tử lấy địa chỉ để gán địa chỉ của
pricechoprice_ptr - Dùng toán tử giải tham chiếu để in ra giá trị của
valuethông quavalue_ptr - Dùng toán tử giải tham chiếu để in ra giá trị của
pricethông quaprice_ptr, với chính xác 2 chữ số thập phân
Đầu ra của bạn cần hiển thị các giá trị được giải tham chiếu theo định dạng sau:
Value through pointer: 75
Price through pointer: 19.99Thử thách này kiểm tra mức độ hiểu biết của bạn về cách toán tử giải tham chiếu lấy giá trị ban đầu của biến bằng cách lần theo địa chỉ được lưu trong con trỏ.
Tự làm thử
#include <stdio.h>
int main() {
// TODO: Viết code của bạn ở đây
// 1. Khai báo và khởi tạo các biến (variables)
// 2. Khai báo các con trỏ
// 3. Gán địa chỉ cho các con trỏ
// 4. In ra các giá trị (values) thu được khi giải tham chiếu con trỏ
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