Con trỏ tới con trỏ & truyền con trỏ tới hàm trong C++

Con trỏ tới con trỏ & truyền con trỏ tới hàm trong C++ là gì? Nó sẽ hoạt động như thế nào? Mời bạn đọc cùng eLib.VN tìm hiểu qua bài viết dưới đây.

Con trỏ tới con trỏ & truyền con trỏ tới hàm trong C++

1. Con trỏ tới con trỏ trong C++

Một con trỏ tới con trỏ trong C++ là một form không định hướng hoặc một chuỗi con trỏ. Thông thường, một con trỏ chứa địa chỉ của một biến. Khi chúng ta định nghĩa một con trỏ tới một con trỏ, con trỏ đầu tiên chứa địa chỉ của con trỏ thứ hai, con trỏ thứ 2 trỏ tới vị trí chứa giá trị.

Con trỏ tới con trỏ trong C++

Con trỏ tới một con trỏ phải được khai báo bởi việc đặt một dấu sao (*) ở trước tên của nó. Ví dụ, sau đây là khai báo một con trỏ tới một con trỏ trong kiểu int:

int **var;

Khi một giá trị mục tiêu được trỏ không định hướng bởi một con trỏ tới một con trỏ, truy cập giá trị đó yêu cầu rằng toán tử dấu sao được áp dụng hai lần, như dưới ví dụ:

#include <iostream>
  
using namespace std;
  
int main() {
    int  var;
    int  *ptr;
    int  **pptr;

    var = 100;

    // lay dia chi cua var
    ptr = &var;

    // lay dia chi cua ptr
    pptr = &ptr;

    // In gia tri cua bien var va cac con tro ra man hinh
    cout << "Gia tri cua var la: " << var << endl;
    cout << "Gia tri tai *ptr la: " << *ptr << endl;
    cout << "Gia tri tai **pptr la: " << **pptr << endl;

    return 0;
}

Kết quả:

Gia tri cua var la: 100
Gia tri tai *ptr la: 100
Gia tri tai **pptr la: 100

2. Truyền con trỏ tới hàm trong C++

Ngôn ngữ lập trình C++ cho phép bạn truyền một con trỏ tới một hàm. Để truyền con trỏ tới hàm trong C++ bạn chỉ cần khai báo tham số hàm có kiểu con trỏ.

Ví dụ sau chúng ta truyền một con trỏ unsigned long tới một hàm và thay đổi giá trị của nó bên trong hàm, truyền tham chiếu khi gọi hàm:

#include <iostream>
#include <ctime>
  
using namespace std;
void laySoGiay(unsigned long *par);

int main() {
    unsigned long seconds;

    laySoGiay(&seconds);

    // in gia tri
    cout << "So giay la: " << seconds << endl;

    return 0;
}

void laySoGiay(unsigned long *par) {
    // Lay so giay hien tai
    *par = time( NULL );
    return;
}

Kết quả:

So giay la: 1542429527

Với hàm có tham số là một con trỏ, thì bạn cũng có thể truyền một mảng vào, ví dụ:

#include <iostream>
using namespace std;
  
// khai bao prototype ham:
double giaTriTB(int *arr, int size);
  
int main() {
    // khai bao mang so nguyen arr co 5 phan tu.
    int arr[5] = {10, 20, 100, 30, 60};
    double trungbinh;
  
    // truyen con tro toi mang duoi dang mot tham so.
    trungbinh = giaTriTB(arr, 5);
  
    // hien thi ket qua
    cout << "Gia tri trung binh la: " << trungbinh << endl; 
     
    return 0;
}

double giaTriTB(int *arr, int size) {
    int    i, sum = 0;      
    double trungbinh;         
   
    for (i = 0; i < size; ++i) {
        sum += arr[i];
    }
  
    trungbinh = double(sum) / size;
  
    return trungbinh;
}

Kết quả:

Gia tri trung binh la: 44

Trên đây là bài viết của eLib.VN về Con trỏ tới con trỏ & truyền con trỏ tới hàm trong C++. Hy vọng qua bài này bạn sẽ hiểu và vận dụng trong quá trình học tập và làm việc với C++. Chúc các bạn thành công!

Ngày:28/10/2020 Chia sẻ bởi:Ngoan

CÓ THỂ BẠN QUAN TÂM