• Để con trỏ p trỏ đến biến x ta phải dùng phép gán p = địa chỉ của x. − Nếu x không phải là mảng ta viết: p = &x.
− Nếu x là mảng ta viết: p = x hoặc p = &x[0].
• Không gán p cho một hằng địa chỉ cụ thể. Ví dụ viết p = 200 là sai. • Phép toán * cho phép lấy nội dung nơi p trỏ đến, ví dụ để gán nội dung nơi p trỏ đến cho biến f ta viết f = *p.
• & và * là 2 phép toán ngược nhau. Cụ thể nếu p = &x thì x = *p. Từ đó nếu p trỏ đến x thì bất kỳ nơi nào xuất hiện x đều có thể thay được bởi *p và ngược lại.
Ví dụ 1 :
int i, j ; // khai báo 2 biến nguyên i, j
p = &i; // cho p trỏ tới i q = &j; // cho q trỏ tới j
cout << &i ; // hỏi địa chỉ biến i
cout << q ; // hỏi địa chỉ biến j (thông qua q) i = 2; // gán i bằng 2
*q = 5; // gán j bằng 5 (thông qua q) i++ ; cout << i ; // tăng i và hỏi i, i = 3
(*q)++ ; cout << j ; // tăng j (thông qua q) và hỏi j, j = 6 (*p) = (*q) * 2 + 1; // gán lại i (thông qua p)
cout << i ; // 13
Qua ví dụ trên ta thấy mọi thao tác với i là tương đương với *p, với j là tương đương với *q và ngược lại.
1.3. Các phép toán với con trỏ
Trên đây ta đã trình bày về 2 phép toán một ngôi liên quan đến địa chỉ và con trỏ là & và *. Phần này chúng ta tiếp tục xét với các phép toán khác làm việc với con trỏ.