[Bài 35] Con trỏ và mảng 1 chiều

[Bài 35] Con trỏ và mảng 1 chiều

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 <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

Lập trình C++ cơ bản