首页 > 其他 > 详细

va_arg读取类型不匹配

时间:2021-05-20 15:28:39      阅读:12      评论:0      收藏:0      [点我收藏+]

va_arg读取类型不匹配

#include <stdio.h>
#include <stdarg.h>

double average(int num, ...) {
    va_list valist;
    // 定义函数额外参数序列
    double sum = 0.0;
    int i;

    // 为num个参数初始化
    va_start(valist, num);
	
    for (i = 0; i < num; i ++) {
        sum += va_arg(valist, double);
    }
    // 根据类型获取数字
    va_end(valist);

    // 释放内存
    return sum / num;
}

int main() {
    printf("Average of numbers is %340f\n", average(1, 1));
    return 0;
}
Average of numbers is 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049406564584124654

va_arg(va, type)是按照type类型的格式去读取va当前指向的数据,而且是强制性(底层数据)的。

如上,我把1(int)类型的数据强制读成double结果输出的值是下面的这个值。

可见,这里绝不是什么自动类型提升,一定注意,不同类型的数据一定使用对应的格式去读取

技术分享图片

va_arg读取类型不匹配

原文:https://www.cnblogs.com/mushrain/p/14789387.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!