C语言指针-二级指针

        在C语言中。二级指针时指向指针的指针。换句话说,就是一个二级指针变量存储另一个指针变量的地址。

目录

1、二级指针的声明

2、二级指针的使用

2.1、赋值

2.2、访问二级指针所指向的指针及值

2.3、二级指针的算数操作

3、二级指针与数组

4、二级指针与函数

5、注意事宜

6、总结


1、二级指针的声明

int **pptr;  /* 声明一个指向整型指针的二级指针 */

2、二级指针的使用

2.1、赋值

int var = 100;
int *ptr = &var;    /* 一级指针,指向var */
int **pptr = &ptr;  /* 二级指针,指向ptr */

2.2、访问二级指针所指向的指针及值

        要访问二级指针所指向的一级指针的值,需要进行两次解引用:

printf("%d", **pptr);  /* 首先解引用pptr得到ptr,然后解引用ptr得到var的值,即100 */

2.3、二级指针的算数操作

        通常情况下,不建议不鼓励对二级指针进行算术操作,因为这样做没有实际意义,且易容易犯错。

3、二级指针与数组

        二级指针可以用来表示数组的指针。例如:一个二维数组的元素是一维数组,其行指针可以存储在一个指针数组中,而这个指针数组的地址可以用一个二级指针表示。

#include <stdio.h>

int main() {
    int numbers[5] = {100, 200, 300, 400, 500};  // 声明一个整型数组
    int *ptrs[5];  // 声明一个指针数组,用于存储指向整型的指针
    int **pptrs;   // 声明一个二级指针

    // 初始化指针数组,使每个指针指向数组numbers的一个元素
    for (int i = 0; i < 5; i++) {
        ptrs[i] = &numbers[i];
    }

    // 初始化二级指针,使其指向指针数组
    pptrs = ptrs;

    // 使用二级指针访问数组元素
    for (int i = 0; i < 5; i++) {
        printf("%d\n",**(pptrs + i));
    }

    return 0;
}

 运行结果如下:

100
200
300
400
500

4、二级指针与函数

        二级指针可以作为参数传递给函数,并修改一级指针的值:

#include <stdio.h>

void changePointer(int **pp, int *newPtr) {
    *pp = newPtr;  // 修改pp所指向的一级指针的值
}

int main() {
    int var = 12;
    int *ptr = &var;    /* var地址传递给指针ptr */
    int anotherVar = 25;
    int *newPtr = &anotherVar; /* anotherVar的地址传递给newPtr指针  */ 

    int **pptr = &ptr;    /* 声明一个二级指针指向指针ptr */
    changePointer(pptr, newPtr);  // 修改pptr所指向的指针

    printf("%d", *ptr);  // 输出25,因为ptr现在指向anotherVar
    return 0;
}

输出结果如下:      

25

5、注意事宜

        a、二级指针的使用相对较少,通常只在处理指针数组或需要修改指针本身的情况下使用

        b、在使用二级指针时,必须确保指针正在初始化和解引用是正确的,以避免未定位的行为。

6、总结

        既然二级指针的使用较少,那为什么又要专门编写此章节呢?这也是最近一位考证的学子最近在询问该类问题,索性就写了这两张内容。也算是对知识的一个总结吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EmbSW_Guru_Wx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值