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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mhsszm/article/details/87532397
#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;
}

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

猜你喜欢

转载自blog.csdn.net/mhsszm/article/details/87532397
今日推荐