C++: Giới thiệu về con trỏ và mảng một chiều

Spread the love

image

Có thể bạn quan tâm

    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.

    More From Author