0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

常见的一级指针参数有什么作用

CHANBAEK 来源:EEMaker电子创客营 作者: DK45王 2023-10-24 14:35 次阅读

常见的一级指针参数

先来看一个最常用函数模型,函数func()参数为一个uint8_t 的指针类型,那这个函数有什么作用?

uint8_t data1[3];
void func(uint8_t *p)
{
	p[0]=0x01;
	p[2]=0x02;
}
void main()
{
	uint8_t *p1=data1;
	func(data1);
}
  • 在main函数中先定义了一个指针p1,然后把p1指向了一个数组data1。
  • 把p1作为参数传递进函数func()
  • 结果也很容易猜到,就是data1中的值在func运行时被改变了,分别等于0x01,0x02

那我们就不难理解,指针作为参数传递进去,而函数内部就可以修改这个指针所指向的数据。如下图所示:

图片

而这个就是一级指针,简单的可以看函数定义的参数带一个 “*” 号就是一级指针。p1就是一个一级指针传递进去,而传递进去以后就可以修改这个一级指针所指向的地址的数据,也就是data1。

假如我想修改p1所指向的地址,该怎么办?

如下如所示,现在我想让p1不再指向data1,而是指向data2

图片

这个很明显用上面的一级指针作为参数已经实现不了,它只能修改p1所指向的地址的数据,而现在是要修改p1本身让他指向data2。有的小伙伴可能已经能猜到,p1指向data1我们可以修改data1,那再用一个指针指向p1不就是可以修改p1了。

图片

那这里我们就可以定义一个指针的指针pp1,让他指向p1,这样把pp1传入到函数中,函数内部就可以修改p1的值了。
代码如下:

uint8_t data1[3];
uint8_t data2[3];
void func2(uint8_t **pp)
{
	*p=data2;
}
void main()
{
	uint8_t *p1=data1;
	uint8_t *pp1=&p1;
	func(pp1);
}
89101112

这里传入的pp1就是一个二级指针,而func2的参数也是带两个星号。
那二级指针也就不难理解了,他可以修改指向的指针,也就是修改pp1指向的指针p1的值,让p1可以指向另外一块内存。
那实际上一般在使用的时候可能大部分都会省略掉这个pp1而使用更简便的写法:

void main()
{
	uint8_t *p1=data1;
	func(&p1);
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 参数
    +关注

    关注

    11

    文章

    1784

    浏览量

    32086
  • 函数
    +关注

    关注

    3

    文章

    4304

    浏览量

    62427
  • 指针
    +关注

    关注

    1

    文章

    480

    浏览量

    70509
  • main
    +关注

    关注

    0

    文章

    38

    浏览量

    6140
收藏 人收藏

    评论

    相关推荐

    详解C语言二指针三种内存模型

    指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二
    发表于 11-02 09:35 386次阅读

    嵌入式C语言二指针

    指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二
    发表于 11-04 10:08 579次阅读

    iMatrix平台中如何使用一级菜单

    一级菜单(menu:firstMenu)1.1说明参数说明: showNum:可选。一级菜单显示的数目。链接的url在【系统构建平台】à【菜单管理】中修改或添加。 1.2使用例子,其页面显示如图:
    发表于 05-29 10:43

    基于变速积分的PID一级倒立摆研究

    本文建立一级倒立摆的数学模型,阐述了变速积分的PID优点,对一级倒立摆的变速积分的PID控制进行仿真,对比传统PID控制明显的性能改进。
    发表于 02-03 17:14 73次下载
    基于变速积分的PID<b class='flag-5'>一级</b>倒立摆研究

    一级倒立摆的PID控制设计

    一级倒立摆的PID控制设计
    发表于 11-08 18:51 64次下载

    Mybatis缓存之一级缓存

    本文主要讲mybatis的一级缓存,一级缓存是SqlSession级别的缓存。mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。mybaits提供一级缓存,和二缓存。
    发表于 11-27 20:44 1217次阅读
    Mybatis缓存之<b class='flag-5'>一级</b>缓存

    消防工程师的一级和二哪些区别

    不少考生对于消、二消些困惑:不明白一级消防工程师和二消防工程师到底
    的头像 发表于 08-27 16:32 1.4w次阅读

    C语言二指针的用法与原理

    提到指针,我们都知道指针是用来存储个变量的地址。所以,当我们定义了个指向指针指针的时候(p
    发表于 07-02 14:52 3785次阅读
    C语言二<b class='flag-5'>级</b><b class='flag-5'>指针</b>的用法与原理

    一级/二/三配电箱的作用及用途

    配电箱的一级、二、三箱是啥意思?这是相对而言的问题。我们做个假设:个新建的小区引进条10kV进线,建了
    发表于 02-11 09:47 4136次阅读

    配电箱的一级、二保护措施哪些

      一级保护通常指对电路和设备进行基本的短路保护和过载保护,以确保电路和设备的正常运行。般采用断路器、熔断器、载流开关等设备来实现,具有快速短路保护和过载保护功能,以防止电路和设备烧毁或发生其他严重事故。常见
    发表于 04-04 18:02 6872次阅读

    C语言中一级指针、二指针和三指针

    一级指针的用法其实是取数据的地址,以此类推,二指针就是取一级指针的地址,也可以表示
    发表于 05-19 17:30 1874次阅读
    C语言中<b class='flag-5'>一级</b><b class='flag-5'>指针</b>、二<b class='flag-5'>级</b><b class='flag-5'>指针</b>和三<b class='flag-5'>级</b><b class='flag-5'>指针</b>

    mybatis一级缓存和二缓存的原理

    MyBatis是种轻量级的持久化框架,它提供了一级缓存和二缓存的机制来优化数据库操作性能。一级缓存是默认开启的,而二缓存需要手动配置启
    的头像 发表于 12-03 11:55 1081次阅读

    一级放大器和二放大器哪个好

    一级放大器和二放大器是电子电路中常见的两种放大器,它们在电子设备中起到放大信号的作用一级放大器和二
    的头像 发表于 12-28 10:48 4726次阅读

    一级配电箱的作用哪些

    在电力系统的构建中,一级配电箱作为整个系统的起点,扮演着至关重要的角色。它不仅是电源输入的直接接收者,更是电能分配与控制的核心枢纽。本文将探讨一级配电箱的各项功能。 一级配电箱的电
    的头像 发表于 09-20 17:13 362次阅读

    一级、二和三配电箱的区别

    配电箱作为电能分配与控制的核心设备,发挥着至关重要的作用。根据其在电力系统中的位置和作用不同,配电箱可分为一级、二和三。本文将深入探讨这
    的头像 发表于 09-20 17:21 1790次阅读