【三级指针、二级指针、一级指针、指针值】原理+超直白说明/总结(当然,还是会有点涩~)

看不懂的原理及区别

在计算机编程中,指针是一个变量,其值为另一个变量的地址。指针的级别是根据它们所指向的对象类型来定义的。当我们谈论“一级指针”、“二级指针”和“三级指针”时,我们实际上是在讨论指针所指向的对象的类型。

1. 一级指针

一级指针(或称为普通指针)是最常见的指针类型。它存储了一个变量的地址,这个变量可以是任何基本数据类型(如 int、float、char 等)或复合数据类型(如结构体、数组等)的地址。

例如:

int x = 10;  
int *ptr = &x;  // ptr 是一个一级指针,指向 x 的地址

2. 二级指针

二级指针是一个指针,它指向的是另一个指针的地址,即它存储了一个指针的地址。二级指针常用于处理动态分配的数组、链表等数据结构,以及作为函数的参数来传递指针数组。

例如:

int *arr = malloc(10 * sizeof(int));  // arr 是一个一级指针,指向动态分配的内存  
int **ptr_to_arr = &arr;  // ptr_to_arr 是一个二级指针,指向 arr 的地址

3. 三级指针

三级指针是一个指针,它指向的是另一个二级指针的地址。虽然三级指针在实际编程中较少使用,但在某些复杂的数据结构和算法中可能会遇到。

例如:

int **arr_of_ptrs = malloc(10 * sizeof(int *));  // arr_of_ptrs 是一个二级指针,指向一个指针数组  
int ***ptr_to_arr_of_ptrs = &arr_of_ptrs;  // ptr_to_arr_of_ptrs 是一个三级指针,指向 arr_of_ptrs 的地址

原理及区别

  1. 原理:指针的级别本质上是由它所指向的对象的类型决定的。一级指针指向基本数据类型或复合数据类型的地址,二级指针指向一级指针的地址,三级指针指向二级指针的地址,以此类推。
  2. 区别:
    2.1 功能:不同级别的指针在功能上有所不同。一级指针主要用于访问和操作数据,二级指针和三级指针则更多地用于处理指针本身(如动态内存分配、传递指针数组等)。
    2.2 复杂性:随着指针级别的增加,程序的复杂性也会增加。使用高级别指针时需要更多的注意力和谨慎,以避免出现错误(如野指针、内存泄漏等)。
    2.3 应用场景:不同级别的指针在应用场景上也有所不同。一级指针是最常见的,几乎在所有的程序中都会使用到;二级指针在处理动态分配的数组、链表等数据结构时非常有用;三级指针则较少使用,但在某些复杂的数据结构和算法中可能会遇到。

超直白说明/总结(当然,还是会有点涩~)

毕竟它是指针

指针值

指针值记录的是一个地址,这个地址指向一块内存;

指针(一级指针)

指针指向指针值,可以通过解引用得到指针值,也可以通过解引用修改指针的指向,也就是指向一个新的指针值;
函数所谓的传递一级指针,其实是传递的指针值;

二级指针

二级指针指向一级指针,所以可以修改二级指针的指向,使它指向一个新的一级指针;
二级指针解引用得到一级指针,一级指针解引用得到指针值,通过一级指针修改指向,也就是让一级指针指向新的指针值,使二级指针双重解引用指向的值发生变化;
函数所谓的传递二级指针,其实传递的是二级指针值,解引用后才是一级指针;
当我们想要在函数的函数里面修改指针值时,需要在函数的函数里面修改一级指针,而要在函数的函数里面得到一级指针,我们需要传递二级指针值,也就是说,我们需要传递二级指针。这一过程也就是传说中的—动态内存管理(掩面而泣);

三级指针

三级指针指向二级指针,所以可以修改三级指针的指向,使它指向一个新的二级指针balabal~~

总结

当我们想要修改某个指针指向的指针值时,如果是当前函数(一级函数),则可以直接修改;
当我们想要在函数的函数(二级函数)里面修改时,则可以通过传递二级指针修改;
当我们想要在函数的函数的函数(三级函数)里面修改时,则可以通过传递三级指针修改;
balbal~~
记住,你虽然代码传递的是某级指针,但原理只是传递某级指针值,更简要的说,函数参数传递的本质是“值传递”

本质—函数参数传递的本质是“值传递”!!!

本质—函数参数传递的本质是“值传递”!!!

本质—函数参数传递的本质是“值传递”!!!

**说三遍!!!

  • 54
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

another heaven

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

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

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

打赏作者

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

抵扣说明:

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

余额充值