c语言不定参数

这篇具有很好参考价值的文章主要介绍了c语言不定参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

时间记录:2024/1/22

一、不定参数的函数定义和使用到的c函数

(1)定义

void fun1(参数类型 argName,...);
示例:
void fun1(int count,...);

(2)获取不定参数的值

#include <stdarg.h> //包含头文件

va_list vaList;//定义结构体变量
va_start(vaList,count);//开始遍历不定参数
va_arg(vaList,type);//获取一个不定参数的值,type:int整数、double小数、char*字符串
va_end(vaList);//结束遍历

二、不定参数函数示例

(1)计算int类型数据总和,计算结果为8,argName的值不是使用va_arg函数获取的

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

int madd(const int argName,...);

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

int madd(const int argName,...)
{
	int tempNum = 0;
	
	va_list vaList;
	va_start(vaList,argName);
	
	int i;
	for(i=0;i<argName;i++){
		tempNum += va_arg(vaList,int);
	}
	
	va_end(vaList);
	
	return tempNum;
}

(2)字符串格式化拼接,输出100-21.34%-testdfs文章来源地址https://www.toymoban.com/news/detail-815495.html

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

void mprintf(const char *format,...);

int main()
{
	mprintf("%d-%.2f%-%sdfs\n",100,21.345,"test");
	return 0;
}

void mprintf(const char *format,...)
{
	int fmtPos = 0;//原始字符串format的字符位置
	char tempStr[32];//拼接好不定参数的新字符串
	memset(tempStr,0,sizeof(tempStr));//清空数组
	int tempPos=0;//新字符串tempStr的字符位置
	
	va_list vaList;
	va_start(vaList,format);
	
	for(fmtPos=0;fmtPos<strlen(format);fmtPos++){//遍历原始字符串
		if(format[fmtPos] == '%' && format[fmtPos+1] == 'd'){//格式化输入整数
		    sprintf(tempStr,"%s%d",tempStr,va_arg(vaList,int));
		    tempPos = strlen(tempStr);
		    fmtPos++;
		}else if(format[fmtPos] == '%' && format[fmtPos+1] == 's'){//格式化输入字符串
			sprintf(tempStr,"%s%s",tempStr,va_arg(vaList,char*));
		    tempPos = strlen(tempStr);
		    fmtPos++;
		}else if(format[fmtPos] == '%' && format[fmtPos+1] == 'f'){//格式化输入小数,小数点后全部保留
			sprintf(tempStr,"%s%lf",tempStr,va_arg(vaList,double));
		    tempPos = strlen(tempStr);
		    fmtPos++;
		}else if(format[fmtPos] == '%' && format[fmtPos+1] == '.' && format[fmtPos+3] == 'f'){//格式化输入小数,小数后进行保留指定位
			switch(format[fmtPos+2]){//默认6位,选择1-5位保留
				case '1':
					sprintf(tempStr,"%s%.1lf",tempStr,va_arg(vaList,double));
					tempPos = strlen(tempStr);
					fmtPos+=3;
					break;
				case '2':
					sprintf(tempStr,"%s%.2lf",tempStr,va_arg(vaList,double));
					tempPos = strlen(tempStr);
					fmtPos+=3;
					break;
				case '3':
					sprintf(tempStr,"%s%.3lf",tempStr,va_arg(vaList,double));
					tempPos = strlen(tempStr);
					fmtPos+=3;
					break;
				case '4':
					sprintf(tempStr,"%s%.4lf",tempStr,va_arg(vaList,double));
					tempPos = strlen(tempStr);
					fmtPos+=3;
					break;
				case '5':
					sprintf(tempStr,"%s%.5lf",tempStr,va_arg(vaList,double));
					tempPos = strlen(tempStr);
					fmtPos+=3;
					break;
				default:
					sprintf(tempStr,"%s%lf",tempStr,va_arg(vaList,double));
				    tempPos = strlen(tempStr);
				    fmtPos+=3;
					break;
			}
		}else{
			tempStr[tempPos] = format[fmtPos];
			tempPos++;
		}
	}
	
	va_end(vaList);
	printf("%s",tempStr);
	return;
}

到了这里,关于c语言不定参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • windows系统管理_windows server 2016网络参数配置

    要将安装好的操作系统接入到网络中,首先需要做的是为操作系统配置 IP 地址等参数。Windows 2016 支持 IPV4 以及 IPV6 两种网络协议。 IPV4介绍 网际协议版本4 (Inernet Protocol version 4, IPV4) 又称互联网通信协议第四版,是网际协议开发过程中的第四个修订版本,也是此协议第一

    2024年02月09日
    浏览(33)
  • API Monitor简易使用教程 监控Windows dll调用 监控Windows API调用 查看函数名,参数类型,参数,返回值

    1、API Filter窗口:选定要监听的dll函数或windows API,可以打断点 选中并右键勾上Breakpoint 选 Before Call 2、Monitor New Process 窗口 :选择要运行的exe 3、Summary窗口:会列出所有调用的函数。点函数,查看函数名,参数类型,参数,返回值等。还能设断点。 当调用到断点的函数调用时

    2024年01月21日
    浏览(40)
  • Windows --- 常用消息以及消息附加参数

    Win32:Windows 窗口的原理,既可以编 32 位也可以编 64 位 WM:Windows Message 创建窗口的窗口类型名要写第一步、第二步注册窗口的类型名,否则会导致创建窗口失败 下面来解析 Windows 中常用的消息: 窗口处理函数会处理很多消息,会处理哪些消息呢?下面来监测一下这些消息是

    2024年02月08日
    浏览(24)
  • 【C语言函数参数详解】——实际参数(实参)&形式参数(形参)

    这篇文章我们一起学习一下函数的参数,函数的参数分为 实参和形参。 首先我们来学习实参,什么是实参呢? 实际参数简称“实参”。 在调用有参函数时,函数名后面括号中的参数称为“实参”, 是我们真实传给函数的参数,实参可以是:常量、变量、表达式、函数等。

    2024年02月04日
    浏览(40)
  • 不定积分/定积分——三角函数n次方不定积分公式(包含sec^nx与csc^nx不定积分公式)

    ∫ ( tan ⁡ n x ) d x = 1 n − 1 [ ( tan ⁡ x ) n − 1 ] − ∫ [ ( tan ⁡ x ) n − 2 ] d x ∫(tan ^nx)dx =frac{1}{n-1}left[left(tan xright)^{n-1}right]-∫left[(tan x)^{n-2}right]dx ∫ ( tan n x ) d x = n − 1 1 ​ [ ( tan x ) n − 1 ] − ∫ [ ( tan x ) n − 2 ] d x 记: I n = ∫ sec ⁡ n x d x I_n=intsec ^nx{mathrm{d}x} I n

    2024年02月04日
    浏览(42)
  • 【混合时变参数系统参数估计算法】使用范数总和正则化和期望最大化的混合时变参数系统参数估计算法(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 文献来

    2024年02月10日
    浏览(33)
  • 【Windows系统】产品ID、设备ID等系统参数

    系统:Windows Server 2012 R2 1、Windows 产品ID生成机制 Windows安装密钥是生成Windows产品ID的基础,大家可以在桌面上右键我的电脑属性即可看到。产品ID 由20个字符组成,排列方式如下:AAAAA-BBB-CCCCCCC-DDEEE。其中, AAAAA——为产品编号,比如55661为Windows XP 专业版,89580为Windows Vista旗

    2024年02月12日
    浏览(27)
  • window.location.href 跳转页面,隐藏携带的参数

    问题: 在使用 ajax返回结果后,我们有一种需求:根据返回结果跳转到相应的页面,并且跳转过程中会携带一个或多个参数,传递至某个页面或者后台的某个方法,这个时候跳转页面后携带的参数就会直接暴露给用户,带来极大的安全隐患。 如下一段方法,在执行完 /order/

    2024年02月04日
    浏览(26)
  • C语言 用数组名作函数参数

    当用数组名作函数参数时,如果形参数组中各元素的值发生变化,实参数组元素的值随之变化。 1.数组元素做实参的情况: 如果已经定义一个函数,其原型为 假设函数的作用是将两个形参(x,y)进行交换,现在有以下的函数调用: 用数组元素做实参的情况,与用变量作实参

    2024年02月13日
    浏览(26)
  • RBF神经网络参数的参数优化(进化算法)+Matlab源码

    @RBF神经网络参数的参数优化(进化算法) 1985年,Powell提出了多变量插值的径向基函数(RBF)方法。径向基函数是一个取值仅仅依赖于离原点距离的实值函数,也就是Φ(x)=Φ(‖x‖),或者还可以是到任意一点c的距离,c点称为中心点,也就是Φ(x,c)=Φ(‖x-c‖)。任意一个满足Φ(x

    2023年04月26日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包