int *****p是一个五级指针,指向一个int ****q四级指针。
int *****q是一个四级指针,指向一个int ***r三级指针。
int ***r是一个三级指针,指向一个int **s二级指针。
int **s是一个二级指针,指向一个int *t一个整数指针。
int *t是一个指针,指向一个int i整数。
int i = 0; 假设i存储在地址400
int *t = &i; 那么t的值是400,表示指向400这个地址的一个整数。 t本身存储在地址,假设是1024。
int **s = &t; 那么s的值是1024,指向地址 1024的内容,内容被解释为普通指针。
int ***r = &s; 依次类推。
int ****q = &r;
int *****p = &q;
示例代码
#include <stdio.h>
int main()
{
int i = 0;
printf("变量 i 的值为 %d\t 存储在 %p\n", i, &i);
int *t = &i;
printf("变量 t 的值为 %lx\t 存储在 %p\n", t, &t);
int **s = &t;
printf("变量 s 的值为 %lx\t 存储在 %p\n", s, &s);
int ***r = &s;
printf("变量 r 的值为 %lx\t 存储在 %p\n", r, &r);
int ****q = &r;
printf("变量 q 的值为 %lx\t 存储在 %p\n", q, &q);
int *****p = &q;
printf("变量 p 的值为 %lx\t 存储在 %p\n", p, &p);
return 0;
}
结果: 需要注意的是,我这里用了int,我测试在64位系统上,所以你看到地址(64位),所以输出存储的地址本身也需要用长整数。
变量 i 的值为 0 存储在 0x7ffc2480b004
变量 t 的值为 7ffc2480b004 存储在 0x7ffc2480b008
变量 s 的值为 7ffc2480b008 存储在 0x7ffc2480b010
变量 r 的值为 7ffc2480b010 存储在 0x7ffc2480b018
变量 q 的值为 7ffc2480b018 存储在 0x7ffc2480b020
变量 p 的值为 7ffc2480b020 存储在 0x7ffc2480b028