#include [stdarg.h]

    技术2024-12-26  18

    下面是自我检测的区域,查看题目,自我回答,感觉自己掌握了就可以打勾

    什么方法可以使非main函数传递多个参数,并且该函数应该怎么表示,需要用到哪个头文件,这个头文件里面只有3个函数是哪3个函数,分别有什么作用 #include <stdio.h> #include <stdlib.h> #include <stdarg.h> /* va=var=变量 注意: { 1:va_list是一个堆栈结构体,准备接收"..."接收到的参数! 2:va_start(va_list类型变量,参数个数) ;初始化va_list结构体堆栈的深度! 3:va_arg(va_list类型变量,数据类型) ; 出栈符合该数据类型的下一个参数! 4:va_end(va_list类型变量) ;释放va_list类型的堆栈空间! } */ void Sum(int, ...); //"..."准备接收不定个数的变量! == 入栈操作!+ void SRDARG_TEXT() { Sum(5, 1, 2, 3, 4, 5); //堆栈深度5,参数; } void Sum(int Numbers, ...) { int SUM = 0; va_list Buff_List; //建立va_list结构体变量 va_start(Buff_List, Numbers); //初始化堆栈深度 for (size_t i = 0; i < Numbers; i++) { //注意va_arg()是出栈! SUM = SUM + va_arg(Buff_List,int); //堆栈依次出栈,注意i只能控制出栈次数,不能控制哪一个位置出栈! } va_end(Buff_List); //释放结构体空间! printf("%d", SUM); } ================================================= 运行结果: topeet@ubuntu:~/Desktop$ ./a.out 15

    记住va_arg这个函数,这个stdarg.h是解决函数传递不确定个参数而生的,我们知道可以为main函数传递不确定个数的参数,存放在argv[]里面,个数就是argc,但是普通的函数于main函数不一样,如果需要传递不确定个参数进去,需要这个头文件,里面就只有三个函数,一个是初始化堆栈的深度(用来存储传递进来的不确定个数的参数),函数是va_start;另一个是出栈va_arg;最后一个是释放堆栈va_end

    Processed: 0.013, SQL: 9