int *p, *q, *r ; // khai báo 3 con trỏ nguyên p, q, r
p = q = r = &i ; // cùng trỏ tới i
*p = *q**q + 2**r + 1; // i = 10*10 + 2*10 + 1
cout << i ;
B. Phép toán tăng giảm địa chỉ:
B. Phép toán tăng giảm địa chỉ:
- p ± n: Con trỏ trỏ đến thành phần thứ n sau (trước) p. (Một đơn vị tăng giảm của con trỏ bằng kích thước của biến được trỏ).
- p++, p--, ++p, --p: tương tự p+1 và p-1, có chú ý đến tăng (giảm) trước, sau.
VD1:
int a[] = { 1, 2, 3, 4, 5, 6, 7 }, *p, *q;
p = a; cout << *p ; //trỏ p đến mảng a, *p = a[0]= 1
p += 5; cout << *p ; // *p = a[5] = 6 ;
q = p - 4 ; cout << *q ;
VD2:
C. Hiệu của hai con trỏ:
C. Hiệu của hai con trỏ:
-Phép toán này chỉ thực hiện được khi p và q là 2 con trỏ cùng trỏ đến các phần tử của một dãy dữ liệu nào đó trong bộ nhớ (ví dụ cùng trỏ đến 1 mảng dữ liệu).
-Khi đó hiệu p - q là số thành phần giữa p và q (chú ý p -q không phải là hiệu của 2 địa chỉ mà là số thành phần giữa p và q).
Ví dụ: Giả sử p và q là 2 con trỏ nguyên, p có địa chỉ 200 và q có
địa chỉ 208. Khi đó p - q = - 4 và q - p = 4 (4 là số thành phần
nguyên từ địa chỉ 200 đến 208).
D. Phép toán so sánh:
D. Phép toán so sánh:
Thông thường các phép so sánh chỉ áp dụng cho hai con trỏ trỏ đến phần tử của cùng một mảng dữ liệu nào đó.
Ví dụ :
float a[100], *p, *q ;
p = a ; // p trỏ đến mảng a(tức p trỏ đến a[0])
q = &a[3] ; // q trỏ đến phần tử thứ 3 (a[3]) của mảng