zoukankan      html  css  js  c++  java
  • [原]变参函数原理详解

    /*
    变参函数原理说明:
    va_start就是求得第一个可变参的地址.
    下面几个宏的作用:保是来确定可变参数的列表中每个参数的地址.

    实现变参函数的要点,就是想办法取得每个参数的地址.
    */

    #include
    <stdio.h>
    #include
    <stdarg.h>

    #if 0
    #define va_list void*
    #define va_arg(arg, type) *(type*)arg; arg = (char*)arg + sizeof(type);
    #define va_start(arg, start) arg = (va_list)(((char*)&(start)) + sizeof(start))
    #endif

    int sum(int nr, ...)
    {
    int i = 0;
    int result = 0;
    va_list arg
    = NULL;//定义一个变量
    //va_start的作用却实是将第一个变量的址址给arg.
    va_start(arg, nr); //将第一个变量的地址给arg

    for(i = 0; i < nr; i++)
    {
    result
    += va_arg(arg, int);
    }
    return result;
    }

    int main(int argc, char* argv[])
    {
    printf(
    "%d\n", sum(4, 100,100,100,100));
    printf(
    "%d\n", sum(3, 200, 200, 200));

    return 0;
    }

    ___________________________________________

    第二次程序:

    #include <stdio.h>
    void fun1(char *fmt,...)
    {
    char **lst;

    printf(
    "fun1\n" );
    lst
    = (char *)&fmt+sizeof(char *);

    printf(
    " the parameter is [%s]\n",*lst);
    }
    void fun2(int a,...)
    {
    char *lst;

    printf(
    "fun2\n" );
    lst
    = (char *)&a+sizeof(int);
    printf(
    " the parameter is [%d]\n",*lst);
    }

    int main(void)
    {
    fun1(
    "hello","world");
    fun2(
    1, 2, 3, 4);

    return 0;
    }

  • 相关阅读:
    StatusBar
    iOS开发UI篇-UITabBarController简单介绍
    iOS最全梳理
    UITabbarController的UITabbarItem(例:"我的")点击时,判断是否登录
    iOS APP 发布上架流程
    IOS开发
    IT教育课程考评系统开发-26
    IT教育课程考评系统开发-25
    2020100201-1
    IT教育课程考评系统开发-24
  • 原文地址:https://www.cnblogs.com/hnrainll/p/2128632.html
Copyright © 2011-2022 走看看