美文网首页
C++可变参数

C++可变参数

作者: 爱学习的猫叔 | 来源:发表于2024-08-05 08:37 被阅读0次

核心代码示例

void sum(int count, ...) {
    va_list vp;
    va_start(vp, count);
    int number = va_arg(vp, int);
    cout << number << " ";

    number = va_arg(vp, int);
    cout << number << " ";

    number = va_arg(vp, int);
    cout << number << endl; //超出了给定的1,2,读出来的是未知数
    va_end(vp);
}

// 定义一个函数,接受一个可变数量的参数
void print(const char* format, ...) {
    va_list args;            // 定义一个va_list变量,用来访问可变参数
    va_start(args, format);  // 初始化va_list变量,获取第一个可变参数

    while (*format != '\0') {
        switch (*format) {
        case 'i': // 整数
            cout << va_arg(args, int) << " ";
            break;
        case 'c': // 字符
            cout << static_cast<char>(va_arg(args, int)) << " ";
            break;
        case 's': // 浮点数
            cout << va_arg(args, double) << " ";
            break;
        case 'f': // 字符串
            cout << va_arg(args, const char*) << " ";
            break;
        default: // 如果遇到未知的格式字符,输出错误并退出
            cerr << "Unknown format character: " << *format << endl;
            va_end(args);
            return;
        }
        ++format;
    }

    va_end(args); // 清理va_list变量
    cout << endl;
}

int count(int count, ...) {
    va_list args;// 定义一个va_list变量,用来访问可变参数
    va_start(args, count); // 初始化va_list变量,获取第一个可变参数
    int sum = 0;
    int i = 0;
    for (i; i < count; i++)
    {
        sum += va_arg(args, int);
    }

    return sum;
}


void main() {
    sum(21, 1, 2);
    print("icsf", 42, 'A', 3.14, "Hello, World!");
    int sum = count(4, 60, 5, 6, 7);//60+5+6+7
    cout << sum << endl;

    sum = count(3, 60, 5, 6, 7);//此处指定的长度是3,只会加3个数,60+5+6
    cout << sum << endl;

    sum = count(5, 60, 5, 6, 7);//此处指定的长度是5,超过了后面的参数长度,末尾会加一个未知数,得出的结果无意义
    cout << sum << endl;

    getchar();
}

运行结果

1 2 11407395
42 A 3.14 Hello, World!
78
71
11407473

相关文章

  • C++ 泛型编程(一) —— 可变参数模板

    可变参数模板函数 可变参数模板是 C++ 11 中引入的一个新特性,它允许我们定义一个可以接受可变数目参数的模板函...

  • day14

    可变和不可变参数 不可变类型: 类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a...

  • *args和**kwargs的用法

    可变位置参数*args *args为一个列表,用于向函数传递数量可变的参数,我觉得相当于Java和C++中的重载,...

  • c++函数可变参数

  • C/C++可变参数

    C/C++中支持传递可变参数,即不定参数,例如: 那么如何拿到不定参数,需要借助va_list类型,包含在cstd...

  • C++可变参数宏

    格式 C99开始支持如下可变参数宏 GCC同样支持如下格式 连接符,在展开如将每一个arg展开了arg加上逗号,如...

  • 元组、字典可变参数

    可变参数 需求: 参数数量不确定,能否接收? args元组可变参数 kwargs字典可变参数 传递可变参数

  • C/C++可变参数机制

    在写一个函数时,经常会有实现一个参数未知或不是常数的函数的需求。printf就是这样的一个函数,在 Section...

  • C++可变参数模板

    可变参数模板 原文链接: http://blog.csdn.net/xiaohu2022/article/deta...

  • c++可变参数函数示例

网友评论

      本文标题:C++可变参数

      本文链接:https://www.haomeiwen.com/subject/hddxkjtx.html