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;
    }

  • 相关阅读:
    解惑开源项目协作流程
    结合webpack 一步一步实现懒加载的国际化简易版方案
    SEO优化之——hreflang(多语言网站优化)
    pandas数据分析常用
    多任务: 多进程与多线程
    linux基础知识
    python常用模块之sys, os, random
    递归函数(初级难点)
    内置函数
    函数
  • 原文地址:https://www.cnblogs.com/hnrainll/p/2128632.html
Copyright © 2011-2022 走看看