指针妙用之将函数中形参的值传递给实参

举报
kobesdu 发表于 2022/01/29 13:33:11 2022/01/29
【摘要】 说明指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。 来自 指针的百度百科 baike.baidu.com/item/...

代码说明

指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。 解释来自 指针的百度百科 baike.baidu.com/item/%E6%8C…

技术背景

在编写串口解析协议中,需要对多个数据进行解析。为了实现复用性。实现同一个功能的多次调用,采用指针对参数进行传递。

因为不止一个参数,不能用return的方式返回。同时,若用全局变量的方式,则只能用于传递同一组参数。若采用指针传递方式,则可实现传递两个参数,并具有通用性。 所以使用指针传递的方式,实现返回多个变量。这是在简单的c语言编程使用的一种技巧。

代码及注释如下:

void Get_Value_2(unsigned int*data0,unsigned int *data1)

{ //buf中数据长度

     unsignedshort buf_len = 0;

     //buf数据中值的位数

     unsignedshort buf_data_len = 0;

     unsignedshort buf_data_len_0 = 0;

     unsignedshort buf_data_len_1 = 0;

     unsignedchar i = 0;

     buf_len= Version_buf[2];

     buf_len<<= 8;

     buf_len|= Version_buf[1];

 
     buf_data_len= buf_len - 1 - 5;

     buf_data_len_0= 0;

     for(i= 0;i< buf_data_len;i++)

     {
               if(Version_buf[8+i]!= 0x2C)

                        buf_data_len_0++;

               else

                        break;

     }

     //总的长度减去逗号1个字符

     buf_data_len_1= buf_data_len - buf_data_len_0 - 1;

  

     *data0= 0;

     for(i= 0;i< buf_data_len_0;i++)

     {
               *data0+= (Version_buf[8+i]-0x30)*pow(10,buf_data_len_0 - 1 -i);

     }

    

     *data1= 0;

     for(i= 0;i< buf_data_len_1;i++)

     {
               *data1+= (Version_buf[8+buf_data_len_0+1+i]-0x30)*pow(10,buf_data_len_1 - 1 -i);

     }
复制代码

}

代码中的data就是用于传递的指针。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200