Con trỏ và mảng trong C++ có mối liên hệ chặt chẽ với nhau. Giá trị của một mảng chính là địa chỉ của phần tử đầu tiên trong mảng. Ví dụ, nếu có mảng A[] = {3, 8, 4, 2, 9}, thì A[] sẽ có giá trị là địa chỉ của A[0].
Đặc điểm đáng chú ý là tên mảng chính là một hằng con trỏ, và bạn không thể thay đổi nó.
Đối với mảng một chiều A[], con trỏ sẽ trỏ tới phần tử A[i] thông qua địa chỉ (A + i). Điều này có nghĩa là (A + i) tương đương với &A[i], hay địa chỉ của A[i], và *(A + i) tương đương với giá trị của 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 << "Giá trị của a: " << a << endl;
for(int i = 0; i < n; i++){
cout << "Địa chỉ của a[" << i << "]: " << (a + i) << endl;
}
cout << "Duyệt mảng a kiểu con trỏ: ";
for(int i = 0; i < n; i++){
cout << *(a + i) << ' ';
}
return 0;
}
Đầu ra:
Giá trị của a: 0x6ffdc0
Địa chỉ của a[0]: 0x6ffdc0
Địa chỉ của a[1]: 0x6ffdc4
Địa chỉ của a[2]: 0x6ffdc8
Địa chỉ của a[3]: 0x6ffdcc
Địa chỉ của a[4]: 0x6ffdd0
Duyệt mảng a kiểu con trỏ: 3 8 4 2 9
Trong mảng một chiều, 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 ý rằng bạn có thể sử dụng con trỏ khác để di chuyển 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 << "Duyệt mảng a bằng con trỏ 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;
}
Đầu ra:
Duyệt mảng a bằng con trỏ ptr:
3 8 4 2 9
8
4
2
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 trỏ ptr trỏ tới a[6]: " << endl;
cout << ptr << " " << &a[6] << " " << *ptr << endl;
-ptr; // a[5]
cout << "Con trỏ ptr trỏ tới a[5]: " << endl;
cout << ptr << " " << &a[5] << " " << *ptr << endl;
return 0;
}
Đầu ra:
Con trỏ ptr trỏ tới a[6]: 0x6ffdf8 0x6ffdf8 7
Con trỏ ptr trỏ tới a[5]: 0x6ffdf4 0x6ffdf4 6
Hãy xem thêm bài giảng về con trỏ của mình tại đây.
Nguồn: https://tenrenvietnam.com
Danh mục: a1