zoukankan      html  css  js  c++  java
  • c语言的可变参数

    1 用户可以在调用函数的时候确定这个函数所需要的参数。

    2例子:printf(const char* format,...);

      注意:第一个参数是固定的,后面的参数用三个.表示是可变的

    3 实现一个可变函数所需要的一些函数介绍:

      (1)包含头文件stdarg.h 其中定义了一系列的宏来处理这个可变长度的列表。

      (2)va_list:看成数据类型,循环使用并且每次指向一个可变的参数。因此该类型的变量代表整个参数的列表。

      (3宏 va_stat宏初始化一个va_list类型的变量,让它指向第一个可变参数。

      (4)宏va_arg:返回一个可变长度参数的值并使其指向下一个可变参数

      (5)va_end做清理工作

    4 流程图

       

    4 实现

     1 #include <stdio.h>
     2 #include <stdarg.h>
     3 
     4 /* 可变参数函数,其中第一个参数的类型是固定的,在定义的时候必须已经定义好 */
     5 int print_args(int begin, ...)
     6 {
     7     va_list ap;
     8     char *p;
     9     int n;
    10 
    11     va_start(ap, begin);     /* 从可变参数的第一个参数开始遍历 */
    12     p = va_arg(ap, char *);    /* 得到第一个参数 */
    13     n = 0;
    14 
    15     while(p != NULL){    /* 可变参数以NULL结尾,在遇到NULL结束符之前输出所有的
    16                         参数 */
    17         n++;            /* 累计参数的个数 */
    18         
    19         printf("arg %d : %s
    ", n, p);    /* 输出每个参数 */
    20     
    21         p = va_arg(ap, char*);             /* 得到下一个参数 */
    22     }
    23     
    24     va_end(ap);    /* 参数处理结束,做一些清理工作 */
    25 
    26     return n;    /* 返回参数的个数 */
    27 }
    28 
    29 int main(void)
    30 {
    31     int n;
    32     
    33     n = print_args(-1, "nihao", "zhongguo", NULL); /* 第一次调用,使用4个参数 */
    34     printf("first, without NULL : %d
    ", n);
    35     
    36     n = print_args(-1, "China", "beijing", "Olympic", NULL);/* 第二次调用,
    37                                                               使用5个参数*/
    38 
    39     printf("second, without NULL : %d
    ", n);
    40     return 0;
    41 }

    6 截图

     

  • 相关阅读:
    【代码笔记】iOS-判断textField里面是否有空
    【代码笔记】iOS-判断字符串是否为空
    【代码笔记】iOS-判断中英文混合的字符长度的两种方法
    【代码笔记】iOS-判断有无网络
    【代码笔记】iOS-判断是否是iPhone5
    iOS动画-扩散波纹效果
    (转)对称加密与非对称加密,以及RSA的原理
    (转)iOS GPUImage研究总结
    @inerface的11条规范写法
    Python开发之路
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/7189846.html
Copyright © 2011-2022 走看看