91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

可變參數列表

發布時間:2020-08-05 16:09:47 來源:網絡 閱讀:489 作者:ChrisApril 欄目:編程語言

   我最近對可變參數列表十分感興趣,因為它可以接受不同數目的參數。讓我們先看一下它的聲明:

void printf (const char *format,...)

   我們通過一個具體的例子來理解它:

#include <stdio.h>
#include <stdarg.h>
int average (int val, ...)
{
	int i = 0;
	int sum = 0;
	va_list arg;//定義了一個char 類型的指針
	va_start(arg,val);//讀取所有的參數,從頭開始,后讀取你所給的參數個數,并且把參數放到指針中
	for (i = 0; i < val; i++)
	{
		sum += va_arg(arg,int);
	}
	va_end(arg);//結束讀取
	return sum / val;
}
int main()
{
	int ret = 0;
	ret = average(5,1,2,3,4,5);
	printf("%d\n",ret);
	return 0;
}

   可變參數列表是通過宏-stdarg來實現的,這個頭文件中聲明了一個類型va_list和三個宏va_start,va_arg,va_end,通過右擊并轉到定義處,我們可以發現va_list其實就是一個char *的重命名,函數中是這樣寫的,typedef char * va_list,這就非常好理解了;對于va_start,va_arg和va_end三個宏我們分別轉到定義處可以發現va_start其實是這樣的:,而_crt_va_start依然是由define定義的標識符,其實應該是這樣( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) );而va_arg和va_start類似也是由define定義的標識符,它的原型應該是這樣的:#define _crt_va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ),ap就是指向我的可變參數列表中的第一個參數,通過它可以找到之后的參數;對于va_end它的原型應該是這樣的#define _crt_va_end(ap) ( ap = (va_list)0 ),用于結束va_list說指向的參數列表,當訪問完最后一個可變參數之后,我們就需要調用va_end來結束指向的參數列表

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

改则县| 双牌县| 公安县| 吉木乃县| 禹城市| 溆浦县| 凌源市| 衢州市| 吉林省| 景宁| 封丘县| 阳高县| 静宁县| 龙门县| 新巴尔虎右旗| 昭觉县| 丽水市| 郸城县| 牟定县| 隆尧县| 龙游县| 余江县| 合作市| 酒泉市| 新宾| 科技| 大城县| 固安县| 安国市| 富平县| 汶川县| 龙南县| 磴口县| 堆龙德庆县| 布拖县| 泰顺县| 拉萨市| 常熟市| 乐至县| 定襄县| 丹阳市|