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

    文章

    1398

    浏览量

    31472
  • 函数
    +关注

    关注

    3

    文章

    3881

    浏览量

    61310
  • 指针
    +关注

    关注

    1

    文章

    473

    浏览量

    70363
  • main
    +关注

    关注

    0

    文章

    38

    浏览量

    5968
收藏 人收藏

    评论

    相关推荐

    如何将下载一级目录的文件复制或移动到上一级目录

    我有成千上万个文件,需要移动或复制到它的上一级目录去,可是个个操作非常慢。于是写了下批处理文件,挺好用的,大家可以试试。如何将下载一级目录的文件复制到上
    发表于 01-24 18:21

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

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

    ad8055 放大,为什么第一级可以,到第二就振荡了?

    新手请问这个电路什么问题吗,为什么第一级可以,到第二就振荡了
    发表于 04-09 20:24

    请问ucos创建任务的第二个参数中传递给任务的数据指针参数什么作用

    求教ucos创建任务的第二个参数,传递给任务的数据指针参数什么作用?般都填0,如果需要初始化
    发表于 08-16 04:13

    【设计技巧】指针的使用注意事项:空指针指针赋值、void *指针

    ,而不是具体的标量值,这是指针的精髓,不管是一级指针、二指针、 整型指针、浮点数
    发表于 08-20 08:30

    电容的常见参数哪些?

    电容的常见参数哪些?
    发表于 06-08 06:13

    一级倒立摆matlab仿真,一级倒立摆的Simulink仿真 精选资料分享

    一级倒立摆的Simulink仿真 单倒立摆稳定控制 直线一级倒立摆系统在忽略了空气阻力及各种摩擦之后,可抽象成小车和匀质摆杆组成的系统,如图1所示。m g杆长为 2u图1 直线一级
    发表于 09-01 06:45

    两片LM317联,前一级可调压,后一级无法调压,为什么?

    为了得到两路可调电压,且确保后一级电压不会超过前一级电压,使用两片LM317联,设计图如下图所示,测试时使用12V1A的适配器为模块供电,使用万用表测量发现前一级的LM317可以输出
    发表于 10-21 17:53

    给C语言指针赋值作用

    给C语言指针赋值作用?给普通变量的赋值与给指针变量的赋值何不同?
    发表于 02-25 06:10

    运放的一级放大和多级放大

    运放的一级放大和多级放大比如要放大20倍,如果是一级放大,只要比例系数选择20就可以了。但是有些人使用二放大,就是先放大2倍,再放大10倍!请问在最终倍数样的情况下,
    发表于 06-02 15:48

    请问这部分保护电路具体作用是什么?JFET这种源极和漏极短接的作用,电路输出接在第一级输出和第二输入之间。

    电路如图所示,1点和8点引出去做了个24V的钳位,电路输出接在第一级输出和第二输入之间这部分具体作用是什么,什么原理?
    发表于 03-28 14:21

    C语言入门教程-指针常见错误

    指针常见错误 错误 1:未初始化的指针一个最易犯的指针错误是试图引用未初始化(因而指向的是无效地址)的指针。例如: int*p; *
    发表于 07-29 11:47 977次阅读

    指针作为函数参数

    指针作为函数参数 大多数C程序员开始使用指针时是用它们实现函数的参数,所谓可变参数。为了理解可变参数
    发表于 07-29 11:49 2627次阅读

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

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

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

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