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

    文章

    1167

    浏览量

    30957
  • 函数
    +关注

    关注

    3

    文章

    3332

    浏览量

    60700
  • 指针
    +关注

    关注

    1

    文章

    434

    浏览量

    70295
  • main
    +关注

    关注

    0

    文章

    35

    浏览量

    5867
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    一级倒立摆的PID控制设计

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

    AN4839_STM32F7系列一级缓存

    一级缓存
    发表于 11-21 17:06 1次下载
    AN4839_STM32F7系列<b>一级</b>缓存

    CPU一级缓存

    一级缓存              CPU缓存(Cache Memo
    发表于 12-24 10:21 410次阅读

    Mybatis缓存之一级缓存

    一级缓存,一级缓存是SqlSession级别的缓存。mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。mybaits提供一级缓存,和二缓存。一级缓存
    发表于 11-27 20:44 965次阅读
    Mybatis缓存之<b>一级</b>缓存

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

    不少考生对于消、二消些困惑:不明白一级消防工程师和二消防工程师到底什么区别或者可以先考二再考一级吗等等。今天为大家详细解说下消和二消的不同,看完你就懂了。
    的头像 发表于 08-27 16:32 1.3w次阅读

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

    指针,我们都知道指针是用来存储个变量的地址。所以,当我们定义了个指向指针指针的时候(pointer to pointer),我们也称之为二指针,那针对于这个二指针来说,第
    发表于 07-02 14:52 2966次阅读
    C语言二<b>级</b><b>指针</b>的用法与原理

    指针和多级指针的定义形式

    指针变量作为个变量也有自己的存储地址,而指向指针变量的存储地址就被称为指针指针,即二指针
    的头像 发表于 10-18 16:38 1064次阅读

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

    指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二指针,在使用的时候有着很大的区别
    发表于 11-02 09:35 205次阅读

    嵌入式C语言二指针

    指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二指针,在使用的时候有着很大的区别。
    发表于 11-04 10:08 368次阅读

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

    一级、二、三箱是啥意思?这是相对而言的问题。我们做个假设:个新建的小区引进条10kV进线,建了个配电室,从变压器低压端出线0.4kV到配电柜(一级配电柜),再引出线到每栋楼的配电箱(二配电箱),再出线到每个单元楼的配电柜(三
    发表于 02-11 09:47 1884次阅读

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

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

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

    一级、二、三箱是根据电压级别进行划分的。在国家的《建筑电气设计规范》中,将配电箱的一级、二、三箱进行了如下的规定:
    发表于 04-04 18:11 2.1w次阅读

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

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