日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[原]变参函数原理详解

發布時間:2023/12/9 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [原]变参函数原理详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*
變參函數原理說明:
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

總結

以上是生活随笔為你收集整理的[原]变参函数原理详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。