1. Con Trỏ Và Mảng
Giá trị của mảng chính là địa chỉ phần tử đầu tiên trong mảng, ví dụ mảng A[] = {3, 8, 4, 2, 9} thì A[] có giá trị là địa chỉ của A[0]
Tên mảng chính là một hằng con trỏ và bạn không thể thay đổi được
Mảng 1 chiều A[] thì con trỏ trỏ tới phần tử A[i] là A + i, vậy (A + i) tương đương với &A[i] hay địa chỉ của A[i] và *(A + i) tương đương với A[i]
Ví dụ 1 : Sử dụng mảng thông qua con trỏ
#include "iostream" #include "math.h" using namespace std; int main(){ int n = 5; int a[5] = {3, 8, 4, 2, 9}; cout << "Gia tri cua a : " << a << endl; for(int i = 0; i < n; i++){ cout << "Dia chi cua a[" << i << "] : " << (a + i) << endl; } cout << "Duyet mang a kieu con tro : "; for(int i = 0; i < n; i++){ cout << *(a + i) << ' '; } return 0; }
Output :
Gia tri cua a : 0x6ffdc0 Dia chi cua a[0] : 0x6ffdc0 Dia chi cua a[1] : 0x6ffdc4 Dia chi cua a[2] : 0x6ffdc8 Dia chi cua a[3] : 0x6ffdcc Dia chi cua a[4] : 0x6ffdd0 Duyet mang a kieu con tro : 3 8 4 2 9
Trong mảng 1 chiều thì bạn có thể sử dụng một con trỏ để trỏ tới các phần tử trong mảng và sử dụng các toán tử ++, -- hoặc +, - để di chuyển con trỏ qua lại các ô nhớ trong mảng
Lưu ý giúp mình rằng bạn có thể sử dụng một con trỏ khác để di chuyển qua lại trong mảng nhưng không thể di chuyển hằng con trỏ mảng.
Ví dụ 2 :
#include "iostream" #include "math.h" using namespace std; int main(){ int n = 5; int a[5] = {3, 8, 4, 2, 9}; int *ptr = &a[0]; cout << "Duyet mang a bang con tro ptr : \n"; for(int i = 0; i < n; i++){ cout << *(ptr + i ) << " "; } cout << endl; ++ptr; // => a[1] cout << *ptr << endl; ptr += 2; // a[3] cout << *ptr << endl; --ptr; // a[2] cout << *ptr << endl; return 0; }
Output :
Duyet mang a bang con tro ptr : 3 8 4 2 9 8 2 4
Ví dụ 3 :
#include "iostream" #include "math.h" using namespace std; int main(){ int n = 10; int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int *ptr = &a[3]; ptr += a[2]; // ptr += 3 => a[6] cout << "Con tro ptr tro toi a[6] : " << endl; cout << ptr << " " << &a[6] << " " << *ptr << endl; --ptr; // a[5] cout << "Con tro ptr tro toi a[5] : " << endl; cout << ptr << " " << &a[5] << " " << *ptr << endl; return 0; }
Output :
Con tro ptr tro toi a[6] : 0x6ffdf8 0x6ffdf8 7 Con tro ptr tro toi a[5] : 0x6ffdf4 0x6ffdf4 6
Xem thêm bài giảng về Con Trỏ của mình :