Như bạn đã biết bản chất của con trỏ trong C là nó trỏ đến địa chỉ ô nhớ của một giá trị, con trỏ cũng là một biến. Vậy khái niệm con trỏ cấp 2 hay con trỏ trỏ tới con trỏ trong C là con trỏ trỏ đến địa chỉ ô nhớ của một con trỏ khác.
Cú phápCú pháp của con trỏ cấp 2, có hai toán tử ** trước tên con trỏ.
int **p2;
Tương
tự nếu bạn muốn lưu địa chỉ của con trỏ cấp 2 thì bạn cần con trỏ cấp
3, muốn lưu địa chỉ của con trỏ cấp 3 thì cần con trỏ cấp 4...
Số
lượng dấu * trước tên biến sẽ thể hiện con trỏ là cấp 1, 2 , hay 3. Ví
dụ *ptr là con trỏ cấp 1, **ptr là con con trỏ cấp 2 và ***ptr là con
trỏ cấp 3
Chúng ta sẽ sử dụng code của bài trước để làm ví dụ. Đây là code bài trước:
#include <iostream>
using namespace std;
int main() {
int number = 50;
int *p;
p = &number; // luu tru dia chi cua bien number
cout <<"Gia tri cua number la: " << number << endl;
cout <<"Dia chi cua number la: " << &number << endl; // Lệnh in địa chỉ
cout <<"Gia trị cua number la: " << *p << endl;// Toán tử * trước tên con trỏ, giá trị của biến number
cout <<"Dia chi cua biến number la: "<< p << endl; //Tên con trỏ, địa chỉ của biến number
return 0;
}
Chúng ta sẽ thêm một biến con trỏ cấp 2 gọi là p2 và gán giá trị cho nó là địa chỉ bộ nhớ của biến p.
#include <iostream>
using namespace std;
int main() {
int number = 50;
int *p;
int **p2; //con tro tro toi con tro
p = &number; // luu tru dia chi cua bien number
p2 = &p;
cout <<"Gia tri cua number la: " << number << endl;
cout <<"Dia chi cua number la: " << &number << endl; // Lệnh in địa chỉ
cout <<"Gia trị cua number la: " << *p << endl;// Toán tử * trước tên con trỏ, giá trị của biến number
cout <<"Dia chi cua biến number la: "<< p << endl; //Tên con trỏ, địa chỉ của biến number
cout <<"Dia chi cua con trỏ p la: " << p2 << endl; //Địa chỉ của CON TRO p
cout <<"Gia tri cua bien number la: "<< **p2 << endl;//Giá trị của biến number
return 0;
}
Bấm Run để chạy thử , chúng ta vẫn sử dụng IDE Online.
Không có nhận xét nào:
Đăng nhận xét