C语言实现函数可变参数

printf是如何实现可变参数的?自定义函数能否实现参数可变?【C语言】 序 在我们使用C语言的printf和scanf函数时,是否有好奇过它到底是怎么实现参数任意多的呢? (开始以为是系统自带的,有无小伙伴一起的2333) 好奇心驱使下,终于了解到具体的实现方法 接下来就一起一步一步揭秘吧 ohhh!! # 首先进行比较简单的可变参数自定义函数 代码先挂上: #include <stdio.h> #include <stdarg.h> void myPrintf(int n, ...) { int i; va_list val; va_start 阅读详情

要实现可变参数,需要包含一个头文件:stdarg.h 。这个头文件中包含四个量:-va_list,-va_start,-va_arg,-va_end。va指的是variable argument(可变参数)。

首先声明一个可变参数函数,我们以sum(),对不同个数的数字求和为例。这个函数的第一个参数是 int n,表示参数的个数。第二个参数是三个点 ... 用来占位告诉编译器后面还有若干个参数。所以是这样的 int sum(int n,...)。

在这个函数中用 :va_list 类型来声明参数列表;

                              va_start()函数来打开可变参数列表 ;

                              va_arg() 获取可变参数列表中的参数;(函数的第二个参数要指明可变参数的类型)

                              va_end()函数来关闭可变参数列。

具体使用代码:

#include<stdio.h>
#include<stdarg.h>
int sum(int n,...);
int sum(int n,...)
{
	int i,sum = 0;
	va_list vp;
	va_start(vp,n);
	for(i=0;i<n;i++)
	{
		sum += va_arg(vp,int);
	}
	va_end(vp);
	return sum;
}

int main()
{
	printf("%d",sum(3,1,2,3));
	return 0;
}

结果:

C语言可变参数实现函数重载 <br />ANSI C 标准中,有可变参数的概念,可以通过一组宏实现<br /> <br />    va_list arg_ptr:                       定义一个可变参数列表指针<br />    va_start(arg_ptr, argN):        让arg_ptr指向参数argN<br />    va_arg(arg_ptr, type):          返回类型为type的参数指针,并指向下一个参数<br />    va_copy(dest, src): 阅读详情

相关推荐

C语言参数个数可变函数详解

VA函数(variable argument function),参数个数可变函数,又称可变参数函数。C/C++编程中,系统提供给编程人员的va函数很少。*printf()/*scanf()系列函数,用于输入输出时格式化字符串;exec*()系列函数,用于在程序中执行外部文件(main(int argc,char*argv[])算不算呢,与其说main()也是一个可变参数函数,倒不如说它是exec*()经过封装后的具备特殊功能和意义的函数,至少在原理这一级上有很多相似之处)

C语言 可变参数函数

【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) C语言 可变参数函数 可变参数函数,即参数个数可变的函数。 /* * [返回值] [函数名](固定参数m个, 可变参数n个) * 其中,m>=1, n>=0, 即: */ // 至少需要一个固定参数,否则你怎么定位到参数呢?固定参数的声明与普通函数参数相同 // 可选参数由于数目不定(0个或以上),声明时...

手中沙的博客 977

Win10系统蓝屏错误BAD SYSTEM CONFIG INFO的解决方案

BAD SYSTEM CONFIG INFO错误是Win10系统中较为常见的一种蓝屏错误,通常与系统配置文件损坏或丢失有关。本文介绍了三种有效的解决方法:使用系统修复高级选项修复、通过PE修复文件和重装新系统。用户可以根据实际情况选择合适的方法进行操作。同时,建议用户定期备份系统重要文件和数据,以防止类似问题的发生。在遇到问题时,保持冷静并耐心操作,通常可以顺利解决问题。

mmoo_python的博客 7727

C语言不定参数的两种实现

1、使用以下三个函数可实现不定参数 #include&lt;stdarg.h&gt; void va_start(va_list ap, last); type va_arg(va_list, type); void va_end(va_list ap); 《1》、va_start 该函数用来初始化指针变量ap(va_list实际是void类型),之后处理参数就默认从ap开始处理。last一般...

洛的博客 1万+

Flink项目基础配置指南

在大数据处理领域,Apache Flink凭借强大的实时流处理和批处理能力,成为众多开发者的首选工具。在日常工作中,开发Flink Jar任务是常见需求,但每次都需重复配置日志、梳理pom依赖、设置打包插件等,流程繁琐且易出错。为提升开发效率,减少重复劳动,将这些基础配置进行整理归纳十分必要。本文将围绕Flink项目的本地日志配置、pom依赖及插件配置展开详细介绍,为开发者提供一套可直接复用的基础配置方案,助力Flink项目高效开发。在Flink项目中,日志是了解任务运行状态、排查问题的重要依据。本地日志配

qq_42773076的博客 1211

REALTEK PKE8710ECF开发板入手试玩(一)

REALTEK PKE8710ECF开发板入手试玩

lbqhope的专栏 693

c语言自定义带参数的函数,有参函数,C语言有参函数详解

从形式上看,函数可分为两类:无参函数和有参函数。所谓无参函数,是指在主调函数调用被调函数时,主调函数不向被调函数传递数据。无参函数一般用来执行特定的功能,可以有返回值,也可以没有返回值,但一般以没有返回值居多。有参函数,是指在主调函数调用被调函数时,主调函数通过参数向被调函数传递数据。在一般情况下,有参函数在执行被调函数时会得到一个值并返回给主调函数使用。有参函数是重点,我们主要介绍有参函数。有参...

weixin_42227109的博客 5337

Jetson AGX Orin边缘AI实战:用YOLOv8做目标检测,我的环境配置踩坑与优化记录

本文详细记录了在Jetson AGX Orin上部署YOLOv8目标检测模型的环境配置与优化过程。从JetPack版本确认、PyTorch安装陷阱到Torchvision编译技巧,再到YOLOv8部署和系统级优化,提供了完整的实战指南。特别针对边缘AI设备的特性,分享了CUDA加速、内存管理等性能调优经验,帮助开发者高效完成工业级AI应用部署。

weixin_30839881的博客 377

C语言可变参数详解

01. 什么是可变参数函数 在C语言编程中有时会遇到一些参数可变的函数,例如printf()、scanf(),其函数原型为: int printf(const char* format,…) int scanf(const char *format,…) 就拿 printf 来说吧,它除了有一个参数 format 固定以外,后面的参数其个数和类型都是可变的,用三个点“…”作为参数占位符。 ...

d137578736的博客 1万+

从零搭建企业网络:使用Packet Tracer模拟多区域OSPF组网全过程

本文通过Cisco Packet Tracer模拟,详细演示了从零搭建一个典型企业多区域OSPF网络的完整流程。内容涵盖网络拓扑规划、IP地址设计、多区域划分原理,并提供了从设备初始化、接口配置到OSPF多区域核心配置与验证的详细步骤。文章旨在帮助网络学习者与IT支持人员通过动手实验,将理论知识转化为实际的配置与排障能力。

day7的博客 1032

AIOps探索 | 如何用大模型构建高效运维知识及智能问答平台(1)

好久没有分享AIOps相关干货了,最近大模型这么火,而且我们有客户已经基于大模型构建了知识及智能问答平台,需要在运维领域结合使用场景进行应用。为此,楼主从头到尾声梳理了一遍大模型在运维领域构建知识及智能问答平台的应用场景、技术实现,总结出来供大家一同探索,希望对大家理解和运用大模型有一定帮助~

智能运维及数据中台探索 2812

C语言可变参数函数的原理和实现,及如何编写自定义可变参数函数

C语言中的可变参数函数是一种可以接受不定数量和类型的参数的函数,它可以用来实现一些灵活和通用的功能。本文介绍了C语言中的可变参数函数的原理和实现,以及如何编写自定义的可变参数函数。

极客代码 5306

RK3399平台开发系列讲解(内核入门篇)1.2、如何高效的阅读Linux内核设备驱动

内核开发在很大程度上并不是重新造“轮子”的过程,而是深入理解并尽量复用现有的内核设计框架,然后参照相似的功能模块去添加或改写某项需要的功能。在对内核整体框架以及某些子系统融会贯通以后,我们才有可能站在巨人的肩膀上去改进框架本身,实现自主创新。如果过分强调不必要的“自主创新”,可能会让内核的可维护性变差,最终结果反而得不偿失。 那么此次就分享就围绕如何高效的阅读内核驱动代码:

内核笔记 7342

C语言中可变参数函数实现原理

C语言中可变参数函数实现原理

码城的博客 5612

uniapp [全端兼容] - 实现接入使用天地图及卫星视图切换功能,在国家天地图上自由切换地图显示类型(卫星视图/地形视图/卫星混合/地形混合/普通视图)天地图切换视图显示改成卫星风格,切换地图图层

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,天地图,视图,卫星,地图类型切换,uniAPP天地图,改成卫星视角,在线地图切换,来回切换卫星图,天地图如何实现来回切换卫星图,地形图,卫星视图,VUE3引入天地图卫星版,详细教程示例源码代码,天地图切换卫星用什么api,卫星视角API方法,vue3卫星天地图,能改地图的显示方式,vue3中使用天地图自定义样式切换地图图层,切换报错,加载出错,卫星图太卡,地图图层更换,vue3安装集成天地图详细示例源

🏆 前端领域优质创作者 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C语言中可变参数函数的实现——printf

C语言中可变参数函数的实现(`printf()`的实现)

ahundredmile的博客 1644

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深入C语言——实现可变参数函数

stdarg.h提供了C语言对可变参数的支持,有了这个函数,就可以实现多个参数求统计参数的功能,例如求最大值

微小冷的学习笔记 1874

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C语言可变参数函数实现

c语言实现函数可变参数  

jinkui2008的专栏 4680

C语言可变参数函数及其实现

本文讨论C语言中的可变参数函数,特别关注printf和scanf,它们允许根据需要确定参数的个数。这篇文章还介绍了可变参数函数的实现细节和相关宏。

Aviciit的博客 482

语言可变参数不用sdarg_C语言可变参数函数的实现方法

我们学习C语言的第一天,就是用了可变参数函数。例如:printf("Hello, %s.", pcMyName);从这一天起,也许你一直对printf这个可变参数充满了好奇,它是如何实现的?下面,我们首先介绍如何实现一个可变参数函数。#include #include void PrintIntegers(int n, ...){ va_list arg; va_start(arg, ...

weixin_30416973的博客 93

C语言可变参数函数实现原理

大家对va_list , va_start,va_arg,va_end 不陌生吧? 对scanf, printf类型 (如sscanf,sprintf)的带可变参数的函数的原理知道多少呢?  如果有兴趣了解的 话,推荐大家阅读: http://www.cnblogs.com/acutus/p/variable-parameter.html          当

hjyresdggsd的专栏 396

c语言实现函数可变参数

前言:           本文在很大程度上改编自网友kevintz的“C语言中可变参数的用法”一文,在行文之前先向这位前辈表示真诚的敬意和感谢。       一、什么是可变参数             我们在C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为:         int    printf(    const    char*    for

攻城狮 1045
上一篇: 绕口令般的C指针:指向常量的常量指针的指针!!!
下一篇: 怎样下载Dev-C++
bingoCoder
博客等级 码龄10年 1400粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值