/*=========================================
* Copyright (c) 2020, 逐风墨客
* All rights reserved.
*
* 文件名称:study_varpara.c
* 运行环境:Linux操作系统
* 功能描述:把传入的多个参数正序、倒序显示
=========================================*/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void show_parachange(int n, ...); // 变参函数声明
int main(void)
{
system("clear");
show_parachange(6, 3, 5, 6, 3, -77, 89);
show_parachange(4, 3, 5, 6, 3, -77, 89);
show_parachange(0, 3, 5, 6, 3, -77, 89);
show_parachange(-2, 3, 5, 6, 3, -77, 89);
return 0;
}
/******************************************
* 函数介绍:void show_parachange(int n, ...)
* 输入参数:n-传入参数的个数
* 输出参数:无
* 返回值:无
******************************************/
void show_parachange(int n, ...)
{
int i;
int arg;
va_list ap;
printf("\nThere is %d parameters in total!\n", n);
/* 传入参数正序显示 */
va_start(ap, n);
printf("direct : ");
for (i=0; i<n; i++)
{
arg = va_arg(ap, int);
printf("%d ", arg);
}
va_end(ap);
printf("\n");
/* 传入参数倒序显示 */
va_start(ap, n);
ap = ap + sizeof(va_list) * (n - 1); // 取传入参数最末尾地址
printf("reverse : ");
for (i=0; i<n; i++)
{
arg = va_arg(ap, int);
printf("%d ", arg);
ap = ap - sizeof(va_list) * 2;
}
va_end(ap);
printf("\n");
}
程序运行结果: