3 Toán tử địa chỉ (&) và toán tử nội dung (*)

Một phần của tài liệu GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH C ĐẠI CƯƠNG (Trang 66)

Toán tử địa chỉ (&)

66

Kết quả của phép lấy địa chỉ (&) là một con trỏ, do đó có thể dùng để gán cho một biến pointer.

Ví d5.12:

a) int *px, num;

// px là một pointer chỉ đến biến kiểu int là num. px = #

//xuất địa chỉ của biến num dạng số hệ 16 (hệ hexa)

printf(“%x”, &num); b) int *px, num;

px = &(num +4); // SAI vì ( num+4) không phải là

một biến cụ thể

Lưu ý: Chúng ta thấy cú pháp lệnh nhập dữ liệu scanf (lệnh đã được học ở

chương 2) trong ngôn ngữ lập trình C luôn có dấu & trước biến cần nhập. Điều này xác định cần đưa dữ liệu vào con trỏ chứa địa chỉ của biến tương ứng.  Toán tử nội dung (*)

Toán tử lấy nội dung của một địa chỉ được kí hiệu là dấu * trước một pointer, dùng để lấy giá trị của biến mà con trỏ đang trỏ đến.

Xét lại ví dụ 5.12, ta có:

px là một pointer chỉ đến biến num như ví dụ 5.12 a, thì * px là giá trị của biến num.

Ví dụ 5.13:

a) //num là biến được khai báo và gán giá trị là 10. int num = 10 ;

int *px; // px là một con trỏ chỉ đến kiểu int px= &num ; //px là địa chỉ của biến num.

/*giá trị của *px (tức là num) cộng thêm 3, gán cho k. Sau đó *px thực hiện lệnh tăng 1 đơn vị (++)*/ int k = (* px)++ + 3 ;

// Sau câu lệnh trên num = 11, k = 13 b) int num1 = 2, num2, *pnt;

pnt = &num1 num2 = *pnt;

67

Trong ví dụ trên, biến num1 được gán bằng 2. Dòng pnt = &num1 nghĩa là biến con trỏ pnt chứa địa chỉ của biến num1. Phép gán num2 = *pnt, dấu ‘*’ được đặt ở phía trước biến con trỏ, thì giá trị trả về của biến này l giá trị của biến được trỏ tới bởi con trỏ pnt. Do đó, num2 có giá trị là 2.

Ta minh họa qua hình vẽ sau :

Lưu ý : NULL là hằng khi pointer mang ý nghĩa không chứa một địa chỉ

nào cả. Ta gọi là pointer rỗng.

Một phần của tài liệu GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH C ĐẠI CƯƠNG (Trang 66)