這個函數(shù)主要是用來計算用戶傳進來的數(shù)值之和潮模。
- (int)sum:(int)num, ...
{
int result = num;
int objNum;
va_list arg_list;
va_start(arg_list, num);
while ((objNum = va_arg(arg_list, int)))
{
result += objNum;
}
va_end(arg_list);
return result;
}
va_list:用來保存宏 va_start 拓哺、va_arg 和 va_end 所需信息的一種類型比伏。為了訪問變長參數(shù)列表中的參數(shù)弥锄,必須聲明 va_list 類型的一個對象沼侣。
va_start:訪問變長參數(shù)列表中的參數(shù)之前使用的宏祖能,它初始化用 va_list 聲明的對象,初始化結果供宏va_arg和va_end使用蛾洛;
va_arg:展開成一個表達式的宏养铸,該表達式具有變長參數(shù)列表中下一個參數(shù)的值和類型。每次調用 va_arg 都會修改轧膘,用 va_list 聲明的對象從而使該對象指向參數(shù)列表中的下一個參數(shù)钞螟。
va_end:該宏使程序能夠從變長參數(shù)列表用宏 va_start 引用的函數(shù)中正常返回。
使用方法
使用方法也很簡單谎碍,在可變參數(shù)里鳞滨,所有參數(shù)均用逗號隔開。
NSLog(@"%d", [self sum:1, 34, nil]);
注意事項
使用的時候蟆淀,可變參后最后面加一個nil值拯啦,這樣是代表結束的意思澡匪。就像UIAlertView初始化的那樣,它一開始不知道你有多少個Button褒链,你可以自由地往里加Button唁情,最后也是由一個nil結束,所以兩個是一樣的道理甫匹。
注意點
1)當我們要創(chuàng)建一個可變參數(shù)函數(shù)時甸鸟,必須把省略號( ... )放到參數(shù)列表后面,同時也只能擁有一個這樣的格式兵迅,因為我們不能定義兩個可變的參數(shù)抢韭。
2)當我們需要讀取 可變參數(shù)列表 時,必須先指定一個變數(shù) va_list 喷兼,然后使用宏 va_start 篮绰、va_arg后雷、va_end 來獲取季惯。