Toán tử lấy địa chỉ (&)
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 3 trên 63.
Bây giờ bạn đã biết cách khai báo con trỏ, bạn cần học cách lưu địa chỉ bộ nhớ vào chúng. Toán tử lấy địa chỉ (&) là cách để lấy địa chỉ bộ nhớ của bất kỳ biến nào.
Khi đặt toán tử & trước tên biến, toán tử này trả về địa chỉ bộ nhớ nơi biến đó được lưu trữ. Hãy hình dung như bạn đang hỏi: “Biến này nằm ở đâu trong bộ nhớ?”
int age = 25;
int *ptr;
ptr = &age; // Lưu địa chỉ của 'age' vào 'ptr'Trong ví dụ này, &age cho ta địa chỉ bộ nhớ của biến age. Sau đó, ta gán địa chỉ này cho con trỏ ptr. Giờ đây, ptr đang “trỏ đến” biến age.
Toán tử lấy địa chỉ rất quan trọng vì nó kết nối biến thông thường với con trỏ. Nếu không có nó, bạn không thể cho con trỏ biết cần trỏ đến biến nào. Hãy nhớ rằng kiểu dữ liệu phải khớp nhau: bạn chỉ có thể gán địa chỉ của một số nguyên cho con trỏ được khai báo để trỏ đến số nguyên.
Thử thách
DễViết một chương trình C minh họa cách dùng toán tử lấy địa chỉ để kết nối các biến với con trỏ. Chương trình của bạn cần:
- Khai báo một biến số nguyên tên là
numbervà khởi tạo biến này với giá trị 42 - Khai báo một biến ký tự tên là
lettervà khởi tạo biến này với giá trị 'X' - Khai báo một con trỏ đến số nguyên tên là
num_ptr - Khai báo một con trỏ đến ký tự tên là
char_ptr - Dùng toán tử lấy địa chỉ để gán địa chỉ của
numberchonum_ptr - Dùng toán tử lấy địa chỉ để gán địa chỉ của
letterchochar_ptr - In ra các địa chỉ được lưu trong cả hai con trỏ bằng
printfvới chỉ định định dạng%p
Đầu ra của bạn cần hiển thị địa chỉ con trỏ theo định dạng sau:
Address of number: [address]
Address of letter: [address]Địa chỉ bộ nhớ thực tế sẽ thay đổi giữa các lần chạy chương trình, nhưng định dạng và nhãn phải khớp chính xác như trên. [address] là chỗ giữ chỗ cho địa chỉ được in ra: không in dấu ngoặc vuông.
Tự làm thử
#include <stdio.h>
int main() {
// TODO: Viết code tại đây
// 1. Khai báo và khởi tạo các biến
// 2. Khai báo các con trỏ
// 3. Dùng toán tử lấy địa chỉ để gán địa chỉ
// 4. In các địa chỉ theo định dạng đã cho
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