一、二级指针
指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。
1.jpg一个指向指针的指针变量必须如下声明,即在变量名前放置两个星号。例如,下面声明了一个指向 int 类型指针的指针:
int **p;
当一个目标值被一个指针间接指向到另一个指针时,访问这个值需要使用两个星号运算符,如下面实例所示。
#include <stdio.h>
int main ()
{
int a;
int *ptr;
int **pptr;
a = 100;
/* 获取 a 的地址 */
ptr = &a;
/* 使用运算符 & 获取 ptr 的地址 */
pptr = &ptr;
/* 使用 pptr 获取值 */
printf("Value of a = %d\n", a);
printf("Value available at *ptr = %d\n", *ptr );
printf("Value available at **pptr = %d\n", **pptr);
return 0;
}
运行结果:
Value of a = 100
Value available at *ptr = 100
Value available at **pptr = 100
可以进一步查看一下指针的地址:
#include <stdio.h>
int main ()
{
int a;
int *ptr;
int **pptr;
a = 100;
/* 获取 a 的地址 */
ptr = &a;
/* 使用运算符 & 获取 ptr 的地址 */
pptr = &ptr;
/* 使用 pptr 获取值 */
printf("Value of a = %d\n", a);
printf("Value available at *ptr = %d\n", *ptr );
printf("Value available at **pptr = %d\n", **pptr);
printf("\nAddress of a is %p\n", &a);
printf("Address of *ptr is %p\n", &(*ptr));
printf("Address of **ptr is %p\n\n", &(**pptr));
printf("Address of ptr is %p\n", &ptr);
printf("Address of pptr is %p\n", &pptr);
return 0;
}
运行结果:
Value of a = 100
Value available at *ptr = 100
Value available at **pptr = 100
Address of a is 0061ff0c
Address of *ptr is 0061ff0c
Address of **ptr is 0061ff0c
Address of ptr is 0061ff08
Address of pptr is 0061ff04
二、多级指针
既然有一级指针和二级指针,就有三级指针、四级指针、五级指针……
以三级指针为例,三级指针是“指针的指针的指针”,或者叫“指向‘指向指针的指针’的指针”。
因为多级指针不好理解,并且在编程时容易写错,所以建议尽量不要使用二级以上的指针。
了解小朋友学编程请加QQ307591841(微信与QQ同号),或QQ群581357582。
关注公众号请扫描二维码
qrcode_for_kidscode_258.jpg
网友评论