Một con trỏ của một con trỏ là một dạng của nhiều hướng hoặc một chuỗi các 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ỏ của một con trỏ, thì con trỏ thứ nhất chứa địa chỉ của con trỏ thứ hai, con trỏ này trỏ tới vị trí chứa giá trị thực như hình bên dưới.


Một biến là con trỏ của con trỏ phải được khai báo như sau: int **var;

Khi một giá trị đích được trỏ gián tiếp bởi một con trỏ tới một con trỏ, việc truy cập giá trị đó yêu cầu toán tử **, như được minh họa trong ví dụ dưới đây:

#include <stdio.h>
int main () {

int number;
int *ptr;
int **pptr;

number = 3000;
/* take the address of number */
ptr = &number;
/* take the address of ptr using address of operator & */
pptr = &ptr;
/* take the value using pptr */
printf("Value of number = %d\n", number );
printf("Value available at *ptr = %d\n", *ptr );
printf("Value available at **pptr = %d\n", **pptr);

return 0;
}

Kết quả của chương trình là:

Value of number = 3000
Value available at *ptr = 3000
Value available at **pptr = 3000