ios開發(fā)-Object-C可變參數(shù)函數(shù)

這個函數(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 聲明的對象,初始化結(jié)果供宏va_arg和va_end使用;

va_arg:展開成一個表達式的宏,該表達式具有變長參數(shù)列表中下一個參數(shù)的值和類型。每次調(diào)用 va_arg 都會修改,用 va_list 聲明的對象從而使該對象指向參數(shù)列表中的下一個參數(shù)。

va_end:該宏使程序能夠從變長參數(shù)列表用宏 va_start 引用的函數(shù)中正常返回。

使用方法

使用方法也很簡單,在可變參數(shù)里,所有參數(shù)均用逗號隔開。

NSLog(@"%d", [self sum:1, 34, nil]);

注意事項

使用的時候,可變參后最后面加一個nil值,這樣是代表結(jié)束的意思。就像UIAlertView初始化的那樣,它一開始不知道你有多少個Button,你可以自由地往里加Button,最后也是由一個nil結(jié)束,所以兩個是一樣的道理。

注意點

1)當我們要創(chuàng)建一個可變參數(shù)函數(shù)時,必須把省略號( ... )放到參數(shù)列表后面,同時也只能擁有一個這樣的格式,因為我們不能定義兩個可變的參數(shù)。

2)當我們需要讀取 可變參數(shù)列表 時,必須先指定一個變數(shù) va_list ,然后使用宏 va_start 、va_arg、va_end 來獲取。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容