【C编程】变参函数学习!

/*=========================================
* 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");
}

  程序运行结果:


程序运行结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。