int **q;q 的前面有两个“*”,这个该如何理解呢?与一级指针的理解是一样的。
int i = 10; int *p = &i;前面讲过,指针变量的“基类型”用来指定该指针变量可以指向的变量的类型,即该指针变量只能存放什么类型变量的地址。所以 int*p 表示 p 指向的是 int 型变量,里面只能存放 int 型变量的地址。虽然 p 是指针变量,但只要是变量就有地址,就可以定义一个指针变量存放它:
int **q = &p;为什么存放 &p 要两个“*”呢?因为指针变量 p 的基类型为 int 型,所以 &p 的基类型为 int*型 。所以如果要定义一个能指向 int* 型变量的指针变量,有两个要求:首先它要是指针变量,即一个“*”;其次,该指针变量指向的是 int* 型的数据,或者说存放的是 int* 型变量的地址,所以就是 int**。
int ***r = &q;int***r 就等价于 int***r,所以 r 的基类型就是 int** 型。而 q 的基类型是 int* 型,所以 &q 的基类型是 int** 型。所以 r 有三个“*”才能指向 q 的地址。三个“*”表示三级指针,即指针的指针的指针。三级指针需要三个“*”才能指向最终的内存单元,即 ***r==i。
# include <stdio.h> int main(void) { int i = 10; int *p = &i; int **q = &p; int ***r = &q; printf("i = %d\n", ***r); return 0; } 输出结果是: i = 10这就是多级指针,也很简单,一定要弄清楚。
本文链接:http://task.lmcjl.com/news/16576.html