Tóm Tắt
Con trỏ và mảng trong C++
Trong bài này, bạn sẽ được học về mối quan hệ giữa mảng và con trỏ, và cách sử dụng chúng hiệu suất cao trong chương trình của bạn .
Con trỏ là các biến chứa địa chỉ. Con trỏ không những có thể chứa được địa chỉ của một biến duy nhất, nó còn có thể chứa được địa chỉ các ô nhớ của một mảng.
Bạn đang đọc: Chi tiết bài học Con trỏ và mảng trong C++
Xét ví dụ sau :
int* ptr;
int a[5];
ptr = &a[2]; // &a[2] là địa chỉ của phần tử thứ 3 trong a[5].
Giả sử, con trỏ cần trỏ tới thành phần thứ tư của một mảng, nghĩa là nó chứa địa chỉ của thành phần thứ tư của mảng trong trường hợp trên .
Vì ptr trỏ tới thành phần thứ ba trong trường hợp trên, ptr + 1 sẽ trỏ tới thành phần thứ 4 .
Bạn hoàn toàn có thể nghĩ ptr + 1 sẽ trả về địa chỉ của byte tiếp theo. Nhưng điều đó không đúng .
Vì con trỏ ptr là một con trỏ kiểu int và kích cỡ của int là cố định và thắt chặt trên một hệ quản lý và điều hành ( kích cỡ của int là 4 bytes trên hệ quản lý 64 bits ). Vì thế địa chỉ giữa ptr và ptr + 1 sẽ lệnh nhau 4 bytes .
Nếu con trỏ ptr trỏ tới char, vậy địa chỉ giữa ptr và ptr + 1 sẽ lệch nhau 1 byte, vì kích cỡ của char là 1 byte .
Ví dụ 1: Con trỏ và mảng trong C++
Chương trình C++ giúp hiển thị địa chỉ của các phần tử trong một mảng sử dụng cả mảng và con trỏ.
#include
using namespace std;
int main()
{
float arr[5];
float *ptr;
cout << "Displaying address using arrays: " << endl;
for (int i = 0; i < 5; ++i)
{
cout << "&arr[" << i << "] = " << &arr[i] << endl;
}
// ptr = &arr[0]
ptr = arr;
cout<<"\nDisplaying address using pointers: "<< endl;
for (int i = 0; i < 5; ++i)
{
cout << "ptr + " << i << " = "<< ptr + i << endl;
}
return 0;
}
Đầu ra
Displaying address using arrays : và arr [ 0 ] = 0x7 fff5fbff880 và arr [ 1 ] = 0x7 fff5fbff884 và arr [ 2 ] = 0x7 fff5fbff888 và arr [ 3 ] = 0x7 fff5fbff88c và arr [ 4 ] = 0x7 fff5fbff890 Displaying address using pointers : ptr + 4 = 0x7 fff5fbff890 |
Trong chương trình trên, một con trỏ ptr khác được sử dụng để hiện thị địa chỉ của những thành phần trong mảng arr .
Nhưng những thành phần trong mảng hoàn toàn có thể được truy xuất bằng cách sử dụng ký hiệu con trỏ với cùng tên mảng arr. Ví dụ :
int arr[3];
&arr[0] tương đương với arr
&arr[1] tương đương với arr + 1
&arr[2] tương đương với arr + 2
Ví dụ 2: Con trỏ và mảng
Chương trình C++ giúp hiển thị địa chỉ các phần tử của mảng sử dụng ký hiệu con trỏ.
#include
using namespace std;
int main() {
float arr[5];
cout<<"Displaying address using pointers notation: "<< endl;
for (int i = 0; i < 5; ++i) {
cout << arr + i <
Đầu ra
Displaying address using pointers notation : 0x7 fff5fbff8a0 0x7 fff5fbff8a4 0x7 fff5fbff8a8 0x7 fff5fbff8ac 0x7 fff5fbff8b0 |
Bạn biết rằng con trỏ ptr chứa địa chỉ và biểu thức * ptr trả về giá trị lưu tại địa chỉ đó .
Tương tự, bạn hoàn toàn có thể lấy giá trị lưu trong con trỏ ptr + 1 bằng cách sử dụng * ( ptr + 1 ) .
Xem đoạn mã dưới đây:
int ptr[5] = {3, 4, 5, 5, 3};
-
và ptr [ 0 ] tương đương với ptr và * ptr tương đương với ptr [ 0 ]
-
và ptr [ 1 ] tương đương với ptr + 1 và * ( ptr + 1 ) tương đương với ptr [ 1 ]
-
và ptr [ 2 ] tương đương với ptr + 2 và * ( ptr + 2 ) tương đương với ptr [ 2 ]
-
và ptr [ i ] tương đương với ptr + i và * ( ptr + i ) tương đương với ptr [ i ]
Ví dụ 3: Con trỏ và mảng trong C++
Chương trình C++ giúp chèn và hiển thị dữ liệu nhập vào sử dụng ký hiệu con trỏ.
#include
using namespace std;
int main() {
float arr[5];
// Chèn vào dữ liệu sử dụng ký hiệu con trỏ
cout << "Enter 5 numbers: ";
for (int i = 0; i < 5; ++i) {
cin >> *(arr + i) ;
}
// Hiển thị dữ liệu sử dụng ký hiệu con trỏ
cout << "Displaying data: " << endl;
for (int i = 0; i < 5; ++i) {
cout << *(arr + i) << endl ;
}
return 0;
}
Đầu ra
Enter 5 numbers : 2.5 3.5 4.5 5 2 Displaying data : 2.5 3.5 4.5 5 2 |
Source: https://final-blade.com
Category: Kiến thức Internet