• 写我的读书笔记关于可变参数


    一、简单介绍变参的访问
    变参函数,有一个以上的参数,参数个数不定。声明形式如下:
      type Function(type arg1,...);
            type Function(type arg1, type arg2,...);
    在C语言中经常出现如下声明:
        printf(const char * _Format, ...); 
        scanf(const char * _Format, ...);
    这样的函数,其中它们的参数的个数是不确定的。
    对于它们参数的访问可以通过以下宏进行处理:
    首先、使用这些宏须引用#include <stdarg.h>
    1)定义一个参数列表指针,(通过该指针遍历整个参数列表。)
        va_list arg_ptr;           
    2)确定访问参数列表的起始位置,(也就是说从第几个参数开始取值。)
        va_start(arg_ptr, argN);                   //第一个参数为1)所定义的列表指针,第二个参数是变参函数的参数名。
    3)取得参数的值
        int n = va_arg(arg_ptr, int);            ///第一个参数为1)所定义的列表指针,第二个参数是变参函数的参数类型。
    4)消空参数列表指针,(就是释放指针了)
       va_end(arg_ptr);
    二、举例说明

    #include "stdlib.h"
    #include 
    "stdio.h"
    #include 
    <stdarg.h>
    int Sum(int i, int j, int k, ...);
    void main()
    {
        printf(
    "Sum = %d",Sum(100,20,50,32,0));
    }


    int Sum(int i, int j, int k, ...)
    {
        va_list arg_ptr;
    //1)
        int sum=0,n=i;

        va_start(arg_ptr,i);
    //2)    

        
    while(n != 0)
        
    {        
            sum 
    += n;
            n 
    = va_arg(arg_ptr,int); //3)    
        }

        va_end(arg_ptr);
    //4
        return sum;
    }


    三、其他说明
     1)说明:va_start(arg_ptr,argN); argN是位于第一个可选参数之前的固定参数,(或者说,最后一个固定参数;…之前的一个参数)。
     2)如何确定参数的类型。va_arg(arg_ptr,type); type的类型只有自己定义规则,进行分析,像在printf(_format,...),通过对fromat的分析,可以确定以后的参数列表的数据类型。
       3)如何判定参数结束。实际上printf(),就是以后默认的'\0'作为结束的。

  • 相关阅读:
    详解Javascript匿名函数的使用 转载自IT EYE Blog
    漂亮、免费和响应式HTML5网站模板 转
    Truth, Equality and JavaScript
    Ember.js 示例
    UX Pin 一款在线界面设计网站
    关于工资的三个秘密
    Semantic Versioning 如何进行版本管理
    CSSS CSS幻灯片
    oracle 导入数据报600错误
    Android 初步Android文件目录介绍
  • 原文地址:https://www.cnblogs.com/freebird92/p/605067.html
Copyright © 2020-2023  润新知