首页 > 其他分享 >C温故补缺(十三):可变参数

C温故补缺(十三):可变参数

时间:2022-11-14 17:16:06浏览次数:27  
标签:va 变量 int 补缺 list num 参数 可变 温故

可变参数

stdarg.h 头文件提供了实现可变参数功能的函数和宏。具体步骤如下:

  • 定义一个函数,最后一个参数为省略号,省略号前面可以设置自定义参数,一般传入参数的个数。
int func(int num,...){

}
  • 在函数定义中创建一个 va_list 类型变量,它是一个参数列表,专门用来存参数的结构
  • 使用 int 参数和 va_start 宏来初始化 va_list 变量为一个参数列表。
  • 使用 va_arg 宏和 va_list 变量来访问参数列表中的每个项。

va_arg()有两个参数,第一个是va_list变量,第二个是取出来的参数的类型

  • 使用宏 va_end 来清理赋予 va_list 变量的内存。

如:

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

int sum(int num,...){
    int sum=0;
    va_list vl;
    va_start(vl,num);//在这接收参数
    for(int i=0;i<num;i++){
        sum+=va_arg(vl,int);//有类似指针下移的操作
    }
    va_end(vl);
    return sum;
}
int main(){
    printf("%d\n",sum(5,1,2,3,42,9));
    printf("%d",sum(8,1,2,3,42,9,2,31,45));

}

va_start(vl,num)接收num个参数

va_arg()有类似指针的操作,每次读取一个参数,然后下移读下一个

标签:va,变量,int,补缺,list,num,参数,可变,温故
From: https://www.cnblogs.com/Tenerome/p/Creview13.html

相关文章

  • .net 温故知新:【9】.NET日志记录 ILogger使用和原理
    .net温故知新:【9】.NET日志记录ILogger使用和原理 日志日志作为我们程序记录的“黑匣子”不论什么系统都应该使用到的,比如我们经常使用的log4net就是第三方日志记......
  • C温故补缺(十一):文件读写
    文件读写打开文件fopen() 函数来创建一个新的文件或者打开一个已有的文件FILE*fopen(constchar*filename,constchar*mode);filename 是文件的路径,用来命名......
  • C温故补缺(十):输入输出
    输入输出printf()和scanf()用来格式化输入输出,它们都是有返回值的intprintf()返回输出的内容的长度#include<stdio.h>intmain(){intc=printf("abcdefg\n");......
  • 极客编程python入门-不可变对象
    不可变对象str是不变对象,而list是可变对象对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,比如l=[1,2,34,56,34,78,23,12,12,34,45,657,45]l.sort()print(l)......
  • C温故补缺(九):字节对齐与排序
    字节对齐与排序字节对齐的原因与字节排序取自:VisualEther原文档下载:Gitee_packed_packet用于结构体中变量在内存中的对齐.如typedefstructtest_s{inti;......
  • C温故补缺(八):结构体与共用体
    结构体与共用体结构体是一个可以存储多个不同类型的变量的结构,类似于面对对象中的类(只有成员变量的类).structtag{member-listmember-listmember-......
  • params 可变参数
    voidStart(){//作为可变参数进行产地Debug.Log(Sum(1,2,3));//作为数组进行传递Debug.Log(newint[]{1,2,3});}//可变参数publicint......
  • C温故补缺(七):函数指针与回调函数
    函数指针与回调函数函数指针就是指向函数调用栈地址的指针,定义时须和函数的返回值类型,参数类型相同如:#include<stdio.h>intmax(intx,inty){returnx>y?x:y;......
  • C温故补缺(六):C反汇编常用的AT&Tx86语法
    C语言反汇编用到的AT&Tx86汇编语法参考:CSDN1,CSDN2默认gcc-S汇编出的,以及反汇编出的,都是AT&Tx86代码,可以用-masm=intel指定为intelx86汇编格式gcc-Stest.c-m......
  • C温故补缺(五):main函数的参数
    main()的参数main()函数的参数,用于在外部执行时传入参数,类似windows的bat脚本或linux的sh脚本.在bat脚本中传入参数,用%接收.sh脚本的参数用$接收.c语言编译成可执行文......