C++可变参数

核心代码示例

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容