可变参数与 stdarg.h 库

简介: 可变参数与 stdarg.h 库

可变参数与 stdarg.h 库

在 C 语言中,有时候需要编写具有可变数量参数的函数,例如 printf 函数就接受可变数量的参数。为了处理这种情况,C 标准库提供了 <stdarg.h> 头文件,其中定义了一些宏和变量类型,以便在参数个数未知时获取函数中的参数。

va_list 变量类型

va_list 是一个类型,用于存储由 va_start()va_arg()va_end() 这三个宏处理的信息。

库宏

va_start()

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

void print_ints(int num, ...) {
    va_list args;
    va_start(args, num);

    for (int i = 0; i < num; ++i) {
        int value = va_arg(args, int);
        printf("%d: %d\n", i, value);
    }

    va_end(args);
}

int main() {
    print_ints(3, 10, 20, 30);
    return 0;
}

va_arg()

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

void print_strings(int num, ...) {
    va_list args;
    va_start(args, num);

    for (int i = 0; i < num; ++i) {
        char *value = va_arg(args, char*);
        printf("%d: %s\n", i, value);
    }

    va_end(args);
}

int main() {
    print_strings(3, "Hello", "World", "!");
    return 0;
}

va_end()

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

void print_doubles(int num, ...) {
    va_list args;
    va_start(args, num);

    for (int i = 0; i < num; ++i) {
        double value = va_arg(args, double);
        printf("%d: %.2f\n", i, value);
    }

    va_end(args);
}

int main() {
    print_doubles(3, 3.14, 2.718, 1.618);
    return 0;
}

这些例子展示了如何使用 <stdarg.h> 中的宏来处理可变数量的参数。va_start() 宏用于初始化参数列表,va_arg() 宏用于检索参数列表中的下一个参数,va_end() 宏用于结束对参数的处理。通过这些功能,我们可以在不知道参数个数的情况下编写更加灵活的函数。

相关文章
|
10月前
|
存储 Java Python
python变量、常量、数据类型
python变量、常量、数据类型
|
Python
【从零学习python 】26. 函数参数与返回值的应用
【从零学习python 】26. 函数参数与返回值的应用
72 0
|
10月前
|
Python
Python中如何定义函数 以及实参和形参的区别
Python中如何定义函数 以及实参和形参的区别
135 1
|
数据库 Python
Python 纯函数与副作用,可变参数与不可变参数
在Python的函数式编程中,Python既可以在调用时对实参进行修改,也可以通过返回值返回函数调用结果。这样的既有返回值又能修改传参的模式,在进行编程开发时,容易遗漏修改传参对结果的影响
123 0
|
存储 C++ 开发者
python|基础|值传递和引用传递
python|基础|值传递和引用传递
182 0
|
Python
Python 可变类型作为函数默认参数时的副作用
Python 可变类型作为函数默认参数时的副作用
107 0
python总结(数据类型、逻辑控制、函数、类与对象、推导式、解包、类型转换、异常、上下文、jsonpath、定时器)
python总结(数据类型、逻辑控制、函数、类与对象、推导式、解包、类型转换、异常、上下文、jsonpath、定时器)
|
Python
python中函数的可变参数
python中函数的可变参数
172 0
|
存储 程序员 API
python中lambda表达式与函数,函数传参、引用、作用范围、函数文档
python中lambda表达式与函数,函数传参、引用、作用范围、函数文档
157 0
|
存储 C++ Python
Python 函数中,参数是传值,还是传引用?
Python 函数中,参数是传值,还是传引用?
132 0