C语言中可变参数函数使用(va_list)

14 篇文章 0 订阅
#include <iostream>
#include "stdlib.h"
#include "assert.h"
using namespace std;

//可变长参数的学习
#include <stdarg.h>
#define END -1
int va_sum(int first_num, ...)
{
	// (1) 定义参数列表
	va_list ap;
	// (2) 初始化参数列表
	va_start(ap, first_num);
	int result = first_num;
	int temp = 0;
	// 获取参数值
	while ((temp = va_arg(ap, int)) != END)
	{
		result += temp;
	}
	// 关闭参数列表
	va_end(ap);
	
	return result;
}


int va_printf1(char* var1, ...)
{
	// (1) 定义参数列表
	va_list ap;
	// (2) 初始化参数列表
	va_start(ap, var1);
	char *p, *sval;
	int ival;
	double dval;
	for (p = var1; *p; p++)
	{
		if (*p != '%')
		{
			putchar(*p);
			continue;
		}

		switch (*++p)
		{
		case 'd':
			ival = va_arg(ap, int);
			printf("%d", ival);
			break;
		case 'f':
			dval = va_arg(ap, double);
			printf("%f", dval);
			break;
		case 's':
			sval = va_arg(ap, char *);
			printf("%s", sval);
			//for (sval = va_arg(ap, char *); *sval; sval++)
			//	putchar(*sval);
			break;
		default:
			putchar(*p);
			break;
		}
	}
	// 关闭参数列表
	va_end(ap);

	return true;
}

main函数……

int main()
{

	int sum_val = va_sum(1, 2, 3, 4, 5, END);
	printf("sum_val 可变长参数测试 %d\n", sum_val);
	va_printf1("%d  %f     %s %s", 1, 2.0, "you ", "how do you do ");
	cout << endl;
	system("pause");
    return 0;
}

测试输出:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值