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<stdio.h>
int main() {
int number = 50;
int *p;
p = &number; // luu tru dia chi cua bien number
printf("Gia tri cua number la %d\n", number); // Lệnh in giá trị biến
printf("Dia chi cua number la %p\n", &number); // Lệnh in địa chỉ lưu ý sử dụng %p
printf("Gia trị cua number la %d\n", *p);// Toán tử * trước tên con trỏ, giá trị của biến number
printf("Dia chi cua biến number la %p\n", p); //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<stdio.h>
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;
printf("Gia tri cua number la %d\n", number); // Lệnh in giá trị biến
printf("Dia chi cua number la %p\n", &number); // Lệnh in địa chỉ lưu ý sử dụng %p
printf("Gia trị cua number la %d\n", *p);// Toán tử * trước tên con trỏ, giá trị của biến number
printf("Dia chi cua biến number la %p\n", p); //Tên con trỏ, địa chỉ của biến number
printf("Dia chi cua con trỏ p la %p \n", p2); //Địa chỉ của CON TRO p
printf("Gia tri cua bien number la %d \n", **p2);//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