当前位置: 首页 > wzjs >正文

江门电商网站设计培训托福培训一对一

江门电商网站设计培训,托福培训一对一,网页制作公司 贵阳,咸阳企业网站建设可变参数函数 一,什么可变参数函数?二,实现机制1,函数调用时的栈与栈帧2,可变参数实现机制 一,什么可变参数函数? 普通函数: 声明时参数个数和类型都固定好,比如 int ad…

可变参数函数

  • 一,什么可变参数函数?
  • 二,实现机制
    • 1,函数调用时的栈与栈帧
    • 2,可变参数实现机制

一,什么可变参数函数?

普通函数:
声明时参数个数和类型都固定好,比如 int add(int a, int b),只能接收两个 int。

可变参数函数:
在声明时只写固定的“前导”参数,后面用 … 表示还有不定数量、也不定类型的参数。

有点抽象,下面直接上例子

int my_printf(UART_HandleTypeDef *huart, const char *format, ...)
{char buffer[512];//定义储存字符串的数组va_list arg;//定义可变参数类型int len;//储存字符串长度的变量va_start(arg, format);//初始化第一个参数len = vsnprintf(buffer, sizeof(buffer), format, arg);//格式化字符串va_end(arg);HAL_UART_Transmit(huart, (uint8_t *)buffer, (uint16_t)len, 0xFF);return len;
}

这是我们串口发送时使用的函数,第一个形参固定了是一个UART的句柄(包含UART的所有信息),后面的参数可以改变如:

my_printf(&huart1,"Value=%d\n", 42);
my_printf(&huart1,"A=%d, B=0x%02X, C=%.2f\n", 10, 0x5A, 3.14);

这里应该理解了为什么串口所有可变参数函数了吧
接下来讲讲可变参数函数的具体实现机制

二,实现机制

在讲可变参数函数之前,我们要先了解函数调用时的栈

1,函数调用时的栈与栈帧

栈存储了大量数据,当调用函数时会分出一部分空间,这部分空间就是栈帧,储存函数的信息(参数、局部变量、返回地址等)
注:这些信息会从右往左得挤进栈帧里。可变变量会跟在固定变量后面进入栈帧

2,可变参数实现机制

1,va_list 指针类型,用于指向可变参数列表中的当前位置。
va_list:
指针类型,在原代码中。arg就是用来储存可变变量地址的宏,它得类型就是va_list.
在串口功能中,我们需要访问可变变量,完成传输,arg就是用来储存这些可变变量的。

2,va_start 初始化第一个可变参数的位置,并且规定最后一个固定变量
储存可变变量的容器**(arg)有了,我们该如何访问栈帧里的可变变量呢?
va_start会访问最后一个固定变量的位置,再直接规定下一个位置为第一个可变变量。
arg 会被初始化并指向可变参数的开始位置,方便后续通过 va_arg 获取每个参数。
因为我们前面说了,可变变量是紧跟着固定变量进的栈。

3,va_end 代表对可变参数处理结束,可以释放va_list相关资源
va_end会告诉编译器,我们停止对可变变量的处理,并且清除arg


文章转载自:

http://21TJc4DZ.stLgg.cn
http://di6r6rgo.stLgg.cn
http://i6XsF7vO.stLgg.cn
http://TAZouUYK.stLgg.cn
http://iDPZNqRg.stLgg.cn
http://HbIj4PzN.stLgg.cn
http://DSaFRLbm.stLgg.cn
http://J0lWcQSS.stLgg.cn
http://RC83GZl6.stLgg.cn
http://NkRXaDjx.stLgg.cn
http://kFvNWFrt.stLgg.cn
http://Fnwrj5UO.stLgg.cn
http://L9aTBt0I.stLgg.cn
http://NbJrnmRp.stLgg.cn
http://Ewva1kYV.stLgg.cn
http://yMuGM35i.stLgg.cn
http://VPr416zm.stLgg.cn
http://83W88FqK.stLgg.cn
http://qmqh2n91.stLgg.cn
http://2XgFT9MP.stLgg.cn
http://byTMiUTV.stLgg.cn
http://dQPoXRxr.stLgg.cn
http://h37Kmg4h.stLgg.cn
http://UIL7d5wJ.stLgg.cn
http://17TJUCS6.stLgg.cn
http://OrBcJqKl.stLgg.cn
http://ak7aCD7S.stLgg.cn
http://Ts3o6SZK.stLgg.cn
http://fdwgB3BK.stLgg.cn
http://vGqC3hJH.stLgg.cn
http://www.dtcms.com/wzjs/615464.html

相关文章:

  • 大企业网站建设律师推广网站排名
  • 优品惠网站建设需求wordpress wordstar
  • 网站开发学生鉴定表广告发布费和广告服务费的区别
  • 企业部门网站建设流程wordpress 后台 主题
  • 金华企业网站建设公司永丰县城乡建设局网站
  • 工作牌seo的宗旨是什么
  • wordpress 主题 导入2seo对网店推广的作用
  • 网站备案照做风险投资网站
  • 手机wap网站模板使用网站标题更换
  • 用ps怎么做网站效果图网站建设的分工
  • 网站建设设计要点wordpress显示当前位置 代码
  • 网站备案不注销有什么后果设计logo的小程序
  • 建设网站所需材料大数据平台设计
  • 企业网站建设 新闻宣传中医院网站模板
  • 建站之星网站 seo优化西安西工大软件园做网站的公司
  • 马尔康网站建设重庆住房和城乡建设厅官方网站
  • 制作一个网站流程写网站代码
  • 在电商网站上做推广的技巧郑州建设局
  • 82家合法现货交易所名单苏州推广关键词优化
  • 360街景地图最新版肇庆seo推广公司
  • 门户网站和微网站的区别并且图片越大越好
  • 聊天网站怎么建设wordpress缓存删除了有什么后果
  • 做电池的有哪些网站广东省网站备案注销
  • 贷款网站建设wordpress问卷调查插件
  • pdf 网站建设wordpress开启多站点功
  • 中国建设银行征信网站企业邮箱app下载
  • 多语言做网站重庆网站seo外包
  • 保定外贸网站制作建设工程的招标网站有哪些
  • seo 能提高网站速度吗做免费网站有哪些
  • 简洁大方的电商网站模板优化方案怎么写