Con trỏ kép hoặc con trỏ tới con trỏ là một biến chứa địa chỉ của một con trỏ khác.
Sau đây là phần khai báo cho một con trỏ tới một con trỏ -
datatype ** pointer_name;
Ví dụ, int ** p; p là một con trỏ tới con trỏ
Khởi tạo - ‘&’ được sử dụng để khởi tạo.
Ví dụ:
int a = 10; int *p; int **q; p = &a;
Truy cập - Toán tử hướng dẫn (*) được sử dụng để truy cập.
Ví dụ
Sau đây là chương trình C cho con trỏ tới con trỏ -
#include<stdio.h> main ( ){ int A = 10; int *p; int **q; p = &A; q = &p; printf("A =%d",A); printf("A value of pointer = %d", *p); printf("A value of double pointer = %d", **q); }
Đầu ra
Khi chương trình trên được thực thi, nó tạo ra kết quả sau -
A=10 A value of pointer = 10 A value of double pointer = 10
Con trỏ trống
Nó là một loại con trỏ có thể chứa địa chỉ của bất kỳ biến kiểu dữ liệu nào (hoặc) có thể trỏ đến bất kỳ biến kiểu dữ liệu nào.
Sau đây là khai báo cho con trỏ void -
void *pointername;
Ví dụ:void * vp;
Truy cập - Toán tử ép kiểu dùng để truy cập giá trị của một biến thông qua con trỏ của nó.
Cú pháp như sau -
* ( (type cast) void pointer)
Ví dụ:
int i=10; void *vp; vp = &i; printf ("%d", * ((int*) vp)); type cast
Ví dụ
Sau đây là chương trình C cho con trỏ void -
#include<stdio.h> main ( ){ int i =10; float f = 5.34; void *vp; clrscr ( ); vp = &i; printf ("i = %d", * ((int*)vp)); vp = &f; printf ( "f = %f", * ((float*) vp)); getch ( ); }
Đầu ra
Khi chương trình trên được thực thi, nó tạo ra kết quả sau -
i = 10 f = 5.34