C语言可变参数列表知识总结

[数字电路]用与非门实现BCD译码器驱动数码管 Hello,大家好。这里是xdd_core,好久不见。今天来和大家聊聊大一数字电路课程的一个课设。# Key word:BCD Decoder,Proteus8.x,NAND Gate,Digital Circuit# 流程:Proteus8.x仿真电路并绘制PCB导出Gerber文件打样,最终实物验证。# 以下为我对这个课设的report(里面对整个设计做了详细介绍,并设计了完整的验证电路) 感谢观看,仅供参考,未经作者允许,禁止转载/抄袭,本文已上传至数据库,查重必挂QAQ BCD to 7-Segme 阅读详情

可变参数:

C语言中的可变参数就是将函数实现成可变参数的形式,可以使函数接收一个到多个参数(不固定);

例如下面这段代码:求任意几个数的平均数(其中函数的第一个参数n表示要求n个数的平均数,求的平均数是第一个参数后面的数字的平均数,例如average (2, 1, 3)表示求1 ,3两个数的平均数):
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

int average(int n, ...)
{
    va_list arg;
    int i = 0;
    int sum = 0;
    va_start (arg, n);
    for (i=0; i<n; i++)
    {
        sum += va_arg(arg, int);
    }
    return sum/n;
    va_end (arg);
}

int main()
{
    int ret1 = average (5, 4, 5, 6, 7, 8);
    int ret2 = average (3, 4, 5, 6);
    printf ("ret1 = %d, ret2 = %d\n", ret1, ret2);
    system ("pause");
    return 0;
}

运行结果:
这里写图片描述

1、可变参数函数的原理分析:

(1)、va_list:

这里写图片描述

声明一个 va_list 型的变量 arg,也就是一个char*类型的变量, 它用于访问参数列表未确定的部分。

(2)、va_strat

这里写图片描述

_INTSIZEOF(v):

这里写图片描述

这个变量是调用 va_start 来初始化的。它的第一个参数是va_list 的变量名, 第二个参数是省略号前最后一个有名字的参数, 初始化过程把 arg 变量设置为指向可变参数部分的第一个参数。

(3)、va_arg()

这里写图片描述

为了访问参数, 需要使用 va_arg ,这个宏接受两个参数, va_list 变量和参数列表中下一个参数的类型(在上面的例子中,所有参数都是整型)。va_arg 返回这个参数的值, 并使用 va_arg 指向下一个可变参数。

(4)、va_end

这里写图片描述

当访问完最后一个参数后要调用va_end,将指针清空

最后, 可变参数的原理可以用下面一张图表示:

这里写图片描述

2、可变参数的限制:

(1)可变参数必须从头到尾逐个访问,如果你在连续访问了几个参数后想终止是可以的,但是如果你想一开始就访问到中间的参数是不行的。

(2)参数列表中,至少有一个命名参数,如果连一个命名参数都没有,就无法使用 va_start。

(3) 这些宏无法直接判断世纪存在参数的数量

(4) 这些宏无法直接判断每个参数的类型

(5) 如果在 va_arg 中指定了错误的类型,那么其后果是不可预测的

免费升级哨兵2号分辨率!用SRCNN深度学习模型实现10米→2.5米超分重建 本文详细介绍了如何利用SRCNN深度学习模型,将哨兵2号遥感影像的分辨率从10米免费提升至2.5米。文章提供了从数据准备、模型训练到部署应用的全流程实战指南,旨在通过AI应用技术,为农业监测、城市规划等领域提供更高精度的影像数据支持。 阅读详情

相关推荐

Ansys Lumerical + HFSS + optiSLang 三剑客:手把手教你优化行波MZM调制器(附完整参数配置)

本文详细介绍了如何利用Ansys Lumerical、HFSS和optiSLang三款工具构建自动化协同设计流程,以优化行波马赫曾德尔调制器(TW-MZM)的性能。通过参数化仿真、流程集成与元模型技术,该方案能高效解决多物理场耦合挑战,实现调制带宽、驱动电压等多目标的全局优化,显著提升光子集成芯片的设计效率与性能潜力。

weixin_29251131的博客 586

c语言中average的用法,average的用法辨析整理

average意为平均的,也做平庸的讲。下面小编给大家整理它的多种用法!释义average n. 平均;平均数;(海损的)平均分担;平均水平;(按保单规定应付赔偿额的)降减adj. 平均(数)的;普通的;典型的;平庸的;中等的,适中的v. 算出……的平均数;将……平均分配;使……平衡;平均为,平均达到;呈中间色;(行情下跌时)买进更多的证券(或商品)以降低平均进价[ 过去式 averaged 过去...

weixin_32636413的博客 4476

基于Python的闲鱼商品价格评估模型:爬虫+价格预测全实现

本文介绍了一个完整的全球气候数据抓取与分析流程,采用轻量化的技术栈(requests+pandas+matplotlib+folium),实现以下核心功能: 全球城市定向抓取:支持自定义城市列表,自动获取经纬度并抓取多源气候数据 双数据源互补:结合OpenWeatherMap API(实时数据)和Climate-Data.org(历史数据) 全维度覆盖:采集气温、降水、湿度等核心指标,并进行自动化清洗转换 丰富可视化:生成热力图、趋势图和统计图表,支持地理定位展示 灵活扩展:模块化设计便于新增城市或扩展数据

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 3047

C语言--函数调用求平均值

*班上10个学生,封装一个函数,调用该函数后获得班上的平均分。

weixin_48208102的博客 1743

(南京观海微电子)——TCON介绍

TCON又称:逻辑板,控制板,在液晶电视里的作用和CRT中的视放板相当,但有本质的区别,逻辑板不是一个纯粹的信号放大器,它输入是LVDS格式信号,而不是RGB。逻辑板的作用是把数字板送来的LVDS或TTL图像数据信号,时钟信号进行处理移位寄存器存储将图像数据信号,时钟信号转换成屏能够识别的控制信号行列信号RSDS控制屏内的MOSFET管工作而控制液晶分子的扭曲度。目前国内主要的TCON板生产商有视显光电。传统TCON的布局主要分为以下两种:X+C分离式和X+C一体式。

m0_75095200的博客 3834

网易CodeWave智能生成应用实战:5分钟搞定库存管理系统(附详细配置截图)

本文详细介绍了如何利用网易CodeWave智能生成应用在5分钟内快速构建定制化库存管理系统。通过自然语言描述需求,无需编程即可生成包含产品管理、库存预警等核心功能的应用,并支持字段微调、业务流程注入等深度优化。文章附有详细配置截图,帮助用户高效实现数字化转型。

julia4scientist的博客 888

10月8日 c语言 调用average函数 求两个班学生的平均成绩

#include int main() { float average(float array[],int n); float score1[5]={1,2,3,4,5}; float score2[10]={1,2,3,4,5,6,7,8,9,10}; printf("the average of class a is %5.2f\n",average(score1,5)); pr

Wyq584657515的博客 1万+

XY2-100协议解析

1.XY2-100包括四路信号 : SENDCK(时钟信号)、SYNC(同步信号)、CHANNELX(X通道)、CHANNELY(Y通道)

qq_38360574的博客 9534

aver函数C语言怎么用,C语言函数使用

一、函数基础知识1、函数的声明函数只能定义一次,但可以声明多次。建议在头文件中声明而在源文件定义。函数的声明和函数的定义非常类似,唯一的区别是函数的声明无须函数体,用一个分号替代即可。2、函数的定义函数包括以下部分:返回类型、函数名字、由0个或多个形参组成的列表以及函数体。returntypefunctionname (type parameter1,type parameter2…) {……...

weixin_34640844的博客 2510

PPPoE上网配置不求人:华为路由器命令行操作指南(2023最新版)

本文提供2023年最新的华为路由器PPPoE上网配置命令行操作指南。通过详细的步骤讲解,从连接设备、创建拨号接口、绑定PPPoE客户端到配置内网与NAT,手把手教你完成配置,并附有验证排错方法,助你轻松实现稳定上网。

s4t5u6v的博客 681

神经元细胞结构刨析(持续更新)

神经细胞的学习笔记

weixin_46596227的博客 2221

c语言中aver是什么意思_average函数_函数Average是什么意思

AVERAGE函数SUM函数是用来求和的 用函数计算省事AVERAGE函数是用来求平均值的PRODUCT函数是用来求乘积的还有就是输入公式时前面需要加个等于号(=)希望可以帮到楼主简单的c语言average函数求平均值,代码如下:#includevoid main(){int x, y;double average;scanf("%d %d", &x, &y);average =...

weixin_36216860的博客 8949

企业如何开展BI建设--指标体系建设

很多企业的数字化转型工作都是从做BI项目开始的,很多企业认为,BI就是做指标大屏,所以做了很多的驾驶舱,也做了很多指标,有从系统取的,有手工填报的,甚至手工填报的比例占到了70%,最终BI沦为了填报系统,业务认为BI就是把从线下的微信沟通转到了线上录入展示,并没有给业务代来任何提升,久而久之,BI大屏就没人关心,公司高层也认为数据都是填报的,都经过了加工处理,这种数据不可信,不能反映业务开展的实际。其实在BI系统建设之前,我们首先要做的就是要梳理企业的指标,到底我们要展示哪些指标?

263

C语言基础知识——函数

提示:本文是对C语言基础知识:函数部分的回顾总结 文章目录函数定义函数声明原型函数的缺省认定函数的参数ADT和黑盒递归可变参数列表stdarg宏可变参数的限制 函数定义 函数的定义就是 函数体 的实现。 函数体 就是一个代码块。 函数定义的语法如下: 类型 函数名( 形式参数 ) 代码块 funciton_name() { ... } 函数声明出现在函数被调用的的地方。 return语句 :当执行流到达函数定义的末尾时,函数就将返回(return),也就是说,执行流返回到函数被调用的地方。 ret

wuster_zw的博客 270

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【C语言总结】C语言函数

函数1.函数定义函数定义就是函数体的实现,函数体就是一个代码块,它在函数调用时执行,与函数定义相反,函数声明出现在函数被调用的地方。函数定义的语法: 类型 函数名(形式参数) 代码块代码块就是一对花括号,里面包含了一些声明和语句,因此最简单的函数大致如下:function_name() { } 当这个函数被调用时,它简单的返回,然而,它可以实现一种有用的存根目的,未那些此时尚未实现

Qregi的博客 1671

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C语言可变参数函数的两种实现方式以及va_list、va_start、va_arg、va_end详解

函数的可变参数的实现方式有两种: 1.通过库函数stdarg.h实现 先贴代码 int add(int n,...) { int i = 0; int sum = 0; va_list ap; va_start(ap,n); for(i = 0;i < n;i++) { sum += va_arg(ap,int); ...

weixin_31301271的博客 1561

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C语言只推荐这1本宝藏书,你读过吗?

入门的大家随便搜搜学起来都不会出错,进阶的推荐1本豆瓣评分9.1,这本经典之作真正地让人搞懂了烦人的指针。指针为什么如此重要?。如果你干掉struct、干掉union、干掉数组、甚至你把if-while都干掉、只留下malloc和goto,最多就是程序难写一点而已;但如果你把指针干掉,那C语言就完了。你会用指针、用好指针之后,就能发挥C语言的强大威力;如果你不会用,C语言其实不会比其他的任何一种语言好。所以当你想要进阶你的C语言能力时,对指针有一个深入而完整的理解是必不可少的。

m0_57290404的博客 1109

C语言经典面试题_c语言面试题库(1)

struct st1/*字段a占用了一个字节的7个bit*//*字段b占用了2个bit*//*字段c占用了7个bit*/}s1;sizeof(s1)等于3。因为一个位域字段必须存储在其位域类型的一个单元所占空间中,不能横跨两个该位域类型的单元。也就是说,当某个位域字段正处于两个该位域类型的单元中间时,只使用第二个单元,第一个单元剩余的bit位置补(pad)0。于是可知Sizeof(s2)等于3*sizeof(int)即12struct st2。

2401_89693984的博客 655

c语言学习之函数补漏

每次回头看一些c的基础知识,都有新感觉,觉得这个怎么以前没见到过,靠,这么吊,这又是啥。零零碎碎的东西太多,脑子瞬间感觉不够用啦。 一些基础的就不在这啰嗦了,记录一些不常用的点,以后再来看,不用再翻箱倒柜的找了。1.函数的缺省认定这个主要提到函数原型的重要性,函数原型的作用就是让编译器知道函数的参数数量和类型,以及返回值类型。如果没有原型,直接调用,编译器是默认返回整型。 float f; f

shitangdejiaozi的博客 696

c 复杂的前置后置面试题_c语言经典面试题目知识点详解(经典,非常详细)

作为IT行业人士需要掌握的最基本的计算机语言—c语言,如今的地位只高不低,c语言掌握程度的高低往往在面试的时候可以完全表现出来,而有些问题是大家平时似乎是知道的,但却不能完整准确地回答上来的,小编当年也遇到了很多此类问题,所以今天大家带来精心整理的C语言经典面试题 ,希望对大家有所帮助。温馨提示:文章末尾有亮点!已保存预处理问题一:什么是预编译?何时需要预编译?答:预编译又称预处理,是整个编译过程...

weixin_36050671的博客 205

C语言修炼手册(四万字)

持续更新中....

LYC_462857656的博客 1185

《C和指针》第7章 函数

本章详细介绍了 C 语言中函数的各个方面。函数定义创建了函数的具体实现,函数声明让编译器提前知晓函数的相关信息。函数参数传递是值传递,理解这一点对于编写正确的函数至关重要。ADT 和黑盒概念强调了代码的封装和抽象,提高了代码的可维护性和可重用性。递归是一种强大的编程技术,适用于特定类型的问题,但要注意栈空间的消耗。可变参数列表为函数提供了接受可变数量参数的能力,但使用时需要遵循一定的规则和注意事项。熟练掌握这些知识,有助于编写结构清晰、功能强大的 C 语言程序。

qq_40844444的博客 1011

详解c语言main函数、printf函数、scanf函数与va家族

C语言入门与提升——详解c语言main函数、printf函数与scanf函数,与va家族 前言: 为什么要学习C语言呢?C语言作为最古老的语言之一,走过了半个多世纪的风风雨雨,至今仍然长盛不衰,占据各大高校编程入门课的榜首,可以看出其重要性。作为面向过程语言,它与C++又可以以较小的代价接轨,所以在这里先讲清楚C语言,在C语言的基础上后期再分享数据结构和算法,以及C++编程。 最简单的也是最多的入门程序 #include<stdio.h> int main(){ printf

大白的博客 942

C语言杂谈

回顾C语言,想到什么写什么,欢迎在评论区一起补充

wzh18907434168的博客 1076

C语言细枝末节

结构体,联合体,枚举这些复合类型在定义时并不直接占用空间,而是在使用时分配空间。它们的大小取决于内部成员的大小和对齐方式,以及编译器的实现。通常在实例化这些类型的变量时才会占用实际的内存空间。

qq_35621280的博客 2423

07C语言基础

C语言基础 1.预处理器 C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。 简单说,就是再编译之前,进行替换。 指令 描述 #define 定义宏 #include 包含一个源代码文件 #undef 取消已定义的宏 #ifdef 如果宏已经定义,则返回真 #ifndef 如果宏没有定义,则返回真 #if 如果给定条件为真,则编译下面代码 #else #if 的替代方案 #elif 如果前面的 #if 给定条件不为真,当前条

LJLThomson的博客 298
上一篇: 1.使用main函数的参数,实现一个整数计算器;2、写冒泡排序可以排序多个字符串
下一篇: c语言_可变参数实现求平均值, 最大值,和简单模拟printf函数功能
A__B__C__
博客等级 码龄9年 48粉丝 113原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值