程序员互联网科技C++

小朋友学C语言(41):二级指针与多级指针

2018-09-16  本文已影响7人  海天一树X

一、二级指针

指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。

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
上一篇下一篇

猜你喜欢

热点阅读