Trong C++, con trỏ là một biến được sử dụng để lưu trữ địa chỉ bộ nhớ của các biến khác. Nó là một biến trỏ đến một kiểu dữ liệu (như int hoặc chuỗi) cùng loại và được tạo bằng toán tử *.
Cú pháp của con trỏ trong C++:
data_type_of_pointer *name_of_variable = & normal_variable;
Con trỏ tới Con trỏ hoặc Con trỏ kép trong C++ là gì?
Bây giờ, chúng ta đã biết rằng một con trỏ lưu trữ địa chỉ bộ nhớ của các biến khác. Vì vậy, khi chúng ta xác định một con trỏ đến một con trỏ, con trỏ đầu tiên được sử dụng để lưu trữ địa chỉ của các biến và con trỏ thứ hai lưu trữ địa chỉ của con trỏ đầu tiên. Vì lý do này, điều này được gọi là Con trỏ kép hoặc Con trỏ đến Con trỏ.
Sơ đồ dưới đây giải thích khái niệm Con trỏ kép:
Sơ đồ trên cho thấy biểu diễn bộ nhớ của Con trỏ tới Con trỏ hoặc Con trỏ kép, chúng ta có thể dễ dàng hiểu rằng địa chỉ của biến (tức là Địa chỉ 1) được lưu trữ trong Con trỏ 1 và địa chỉ của Con trỏ 1 (tức là Địa chỉ 2) được lưu trữ trong Con trỏ 2. Điều này được gọi là Double Pointers hoặc Pointer to Pointer.
Làm thế nào để khai báo một con trỏ đến một con trỏ trong C ++?
Khai báo một con trỏ đến con trỏ tương tự như khai báo một con trỏ trong C++. Sự khác biệt là chúng ta phải sử dụng một toán tử * bổ sung trước tên của Con trỏ trong C ++.
Cú pháp của một con trỏ tới con trỏ (con trỏ kép) trong C++:
data_type_of_pointer **name_of_variable = & normal_pointer_variable;
Ví dụ:
int val = 169;
int *ptr = &val; Lưu trữ địa chỉ của val để con trỏ ptr.
int **double_ptr = &ptr; con trỏ đến một con trỏ được khai báo đang trỏ đến một số nguyên.
Sơ đồ dưới đây giải thích khái niệm Con trỏ kép:
Sơ đồ trên cho thấy biểu diễn bộ nhớ của một con trỏ đến một con trỏ. Con trỏ đầu tiên ptr1 lưu trữ địa chỉ của biến và con trỏ thứ hai ptr2 lưu trữ địa chỉ của con trỏ đầu tiên.
Dưới đây là Chương trình C++ để triển khai Pointer to Pointer:
- C++
// C++ program to implement // pointer to pointer #include <bits/stdc++.h> using namespace std; // Driver code int main() { int variable = 169; // Pointer to store the address // of variable int * pointer1; // double pointer to store the // address of pointer1 int ** pointer2; // Storing address of variable // in pointer1 pointer1 = &variable; // Storing address of pointer1 // in pointer2 pointer2 = &pointer1; // Displaying the value of variable // with using both single and double // pointers. cout << "Value of variable :- " << variable << "\n" ; cout << "Value of variable using single pointer :- " << *pointer1 << "\n" ; cout << "Value of variable using double pointer :- " << **pointer2 << "\n" ; return 0; } |
Ra
Value of variable :- 169 Value of variable using single pointer :- 169 Value of variable using double pointer :- 169
Kích thước của con trỏ đến con trỏ trong C++ sẽ là bao nhiêu?
Trong ngôn ngữ lập trình C++, con trỏ kép hoạt động tương tự như một con trỏ bình thường. Vì vậy, kích thước của biến của con trỏ kép và kích thước của biến con trỏ bình thường luôn bằng nhau.
Dưới đây là một chương trình C ++ để kiểm tra kích thước của một con trỏ kép:
- C++
// C++ program to check the size // of a pointer to a pointer. #include <bits/stdc++.h> using namespace std; // Driver code int main() { int val = 169; int * ptr = &val; int ** double_ptr = &ptr; cout << " Size of normal Pointer: " << sizeof (ptr) << "\n" ; cout << " Size of double Pointer: " << sizeof (double_ptr) << "\n" ; return 0; } |
Ra
Size of normal Pointer: 8 Size of double Pointer: 8
Ghi: Đầu ra của đoạn mã trên cũng phụ thuộc vào loại máy đang được sử dụng. Kích thước của một con trỏ không cố định trong ngôn ngữ lập trình C ++ và nó hoàn toàn phụ thuộc vào các yếu tố khác như kiến trúc CPU và hệ điều hành được sử dụng. Thông thường, đối với Hệ điều hành 64 bit, kích thước bộ nhớ 8 byte và đối với Hệ điều hành 32 bit, kích thước bộ nhớ 4 byte được gán.
Thời gian phức tạp: O(1).
Không gian phụ trợ: O(1).