可变参数与 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() 宏用于结束对参数的处理。通过这些功能,我们可以在不知道参数个数的情况下编写更加灵活的函数。

目录
相关文章
|
2月前
|
Go
Go语言中的默认参数和可选参数详解
【2月更文挑战第22天】
268 2
|
9月前
|
Python
python之有关匿名函数和偏函数的定义,优点,以及使用方法
python之有关匿名函数和偏函数的定义,优点,以及使用方法
|
11月前
|
Python
【从零学习python 】26. 函数参数与返回值的应用
【从零学习python 】26. 函数参数与返回值的应用
45 0
|
12月前
|
数据库 Python
Python 纯函数与副作用,可变参数与不可变参数
在Python的函数式编程中,Python既可以在调用时对实参进行修改,也可以通过返回值返回函数调用结果。这样的既有返回值又能修改传参的模式,在进行编程开发时,容易遗漏修改传参对结果的影响
|
Python
【Python入门篇】——Python函数(函数介绍,函数的定义,函数的参数和函数的返回值)
【Python入门篇】——Python函数(函数介绍,函数的定义,函数的参数和函数的返回值)
214 0
|
JavaScript 前端开发 C++
Python 函数参数的传递方式
Python 函数参数的传递方式
115 0
|
Python
Python 可变类型作为函数默认参数时的副作用
Python 可变类型作为函数默认参数时的副作用
|
Python
python中函数的可变参数
python中函数的可变参数
118 0
|
存储 程序员 API
python中lambda表达式与函数,函数传参、引用、作用范围、函数文档
python中lambda表达式与函数,函数传参、引用、作用范围、函数文档
121 0
python函数不能传可变参数
python函数不能传可变参数