指针与二级指针的理解

文章介绍了指针的基本概念,强调指针用于指向数据的地址。二级指针作为指向指针的指针,主要用途在于函数中对指针本身的修改,例如在交换指针地址的情景下。通过代码示例展示了如何使用一级指针和二级指针交换变量的值,以及它们在链式存储结构中的意义。
摘要由CSDN通过智能技术生成

指针与二级指针的理解

一、一句话理解什么是指针

指针存放的是数据变量的地址,目的是为了指向数据所在的位置。

二、理解二级指针

二级指针同样也是指向地址,只不过是指向某一个指针的地址。也就是指向指针的指针。所以以此类推,同样拥有三级指针和更高级的指针。

三、二级指针的作用是什么

在我看来,二级指针用的地方是在函数当中,当一个函数需要对所传进来的指针的本身进行操作的话,就需要使用到二级指针。这里面就涉及到了局部变量和作用域的一个概念。

四、代码演示
#include <stdio.h>

void change(int *p,int *q){
    int temp = *p;
    *p = *q;
    *q = temp;
}

void change2(int **p,int **q){
    int* temp = *p;
    *p = *q;
    *q = temp;
}

int main()
{
    int a=10,b=20;
    int*p,*q;
    p = &a;
    q = &b;
    printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
    //    *p=10,p=6356636 *q=20,q=6356632
    change(p,q);
    printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
    //    *p=20,p=6356636 *q=10,q=6356632
    change2(&p,&q);
    printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
    //    *p=10,p=6356632 *q=20,q=6356636
    return 0;
}

先创建两个指针

int a=10,b=20;
int *p,*q;
p = &a;
q = &b;

使用一级指针

void change(int *p,int *q){
    int temp = *p;
    *p = *q;
    *q = temp;
}
printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
//    *p=10,p=6356636 *q=20,q=6356632
change(p,q);
printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
//    *p=20,p=6356636 *q=10,q=6356632

我们可以发现,使用一级指针我们可以做到指针所指向的内容进行交换,但是并不能做到对指针本身进行交换。这就会出现一个问题,我们学到的数据结构链式表里面,有时候需要用到指针,但是只是通过一级指针我们不能够做到将指针进行交换。

接下来我们再来看一下二级指针

void change2(int **p,int **q){
    int* temp = *p;
    *p = *q;
    *q = temp;
}
printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
//    *p=10,p=6356636 *q=20,q=6356632
change(p,q);
printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
//    *p=20,p=6356636 *q=10,q=6356632
change2(&p,&q);
printf("*p=%d,p=%d\t*q=%d,q=%d\n",*p,p,*q,q);
//    *p=10,p=6356632 *q=20,q=6356636

在二级指针操作中,我们成功交换了一级指针,并且同样一级所指向的内容同样也进行了交换。这就可以让我们在进行数据结构中的链式存储中进行交换指针了。

以上是我对指针的理解。目前还在学习中,如有问题,请各位指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值