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. Trong bài viết này bạn sẽ biết tìm hiểu mối quan hệ giữa mảng 1 chiều và con trỏ.
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 <math.h>
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 :
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 <math.h>
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 :
Ví dụ 3 :
#include <math.h>
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[5] : 0x6ffdf4 0x6ffdf4 6