0965303260
TP. Hồ Chí Minh

[C++]. Con Trỏ Và Mảng 1 Chiều

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ỏ

NỘI DUNG : 

  • Con Trỏ Và Mảng
  • Video Tutorial

image

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] 

con trỏ và mảng

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 : 

u2ClqmTSg8g