[原]变参函数原理详解
生活随笔
收集整理的這篇文章主要介紹了
[原]变参函数原理详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*
變參函數原理說明:
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;
}
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;
}
變參函數原理說明:
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;
}
轉載于:https://www.cnblogs.com/hnrainll/archive/2011/08/05/2128632.html
總結
以上是生活随笔為你收集整理的[原]变参函数原理详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vissim基础
- 下一篇: QueryList4采集-图片本地化