完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
注意:如果点击空白处无法输入,则点击字会有输入提示符 | 则可以使用键盘进行输入!
此板块为 [ARM裸机加强版]
{ va_list ap; va_start(ap, fmt); my_vprintf(fmt, ap); va_end(ap); return 0; } 将va_start(ap, fmt);展开 ap = (char *)&fmt + ( (sizeof(fmt) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) fmt是指向传入参数的指针,那么 &fmt 对 fmt取地址是什么意思? ap是指向什么的? 感觉很懵,大佬们解释一下,感激
|
|
相关推荐
1个回答
|
|
我只能简单的给你分析一下
首先,函数调用的时候参数都会压栈,比如fmt会在栈里的某个地方,fmt的后边一个参数也会存放在栈中紧挨着fmt fmt是字符串指针(栈中存放的是它,而不是字符串内容),取&fmt 就取到了fmt在栈中的地址 ( (sizeof(fmt) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) 是计算fmt这个指针的大小并处理对齐问题 偏移之后就是指向了栈中紧挨着fmt的下一个参数了 |
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2164 浏览 6 评论
1973 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4527 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 03:42 , Processed in 1.400164 second(s), Total 78, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号