IOS 方法帶可變引數寫法及解釋

2021-07-10 22:23:17 字數 978 閱讀 4545

在編寫一些通用類的時候經常會遇到可變引數的處理。就好比 :uialertview的 init方法中的otherbuttontitles:(nsstring *)otherbuttontitles, ...可變引數。ios實現傳遞不定長的多個引數的方法是使用va_list。va_list是c語言提供的處理變長引數的一種方法。在呼叫的時候要在參 數結尾的時候加nil。

va_list的使用需要注意:

(1)首先在函式裡定義va_list型的變數,這個變數是指向引數的指標;

(2)然後用va_start初始化剛定義的va_list變數;

(3)然後用va_arg返回可變的引數,va_arg的第二個引數是你要返回的引數的型別.如果函式有多個可變引數的,依次呼叫va_arg獲取各個引數;

(4)最後用va_end巨集結束可變引數的獲取。

參考示例: 摺疊

c/c++ code

複製內容到剪貼簿

+ (void

)functionname:(nsobject*)string, ...ns_requires_nil_termination } 

va_end(args); 

}  

說明:

va_list args:

//定義乙個指向個數可變的引數列表指標;

va_start(args,string)://string為第乙個引數,也就是最右邊的已知引數,這裡就是獲取第乙個可選引數的位址.使引數列表指標指向函式引數列表中的第乙個可選引數,函式引數列表中引數在記憶體中的順序與函式宣告時的順序是一致的。

va_arg(args,nsstring):返回引數列表中指標所指的引數,返回型別為nsstring,並使引數指標指向引數列表中下乙個引數。  

a_end(args):清空引數列表,並置引數指標args無效。

ns_requires_nil_termination,是乙個巨集,用於編譯時非nil結尾的檢查。

ps:呼叫時要以nil結尾,否則會崩潰。

Java程式設計 可變引數寫法

當你在做專案時,有乙個計算傳入引數的和,但引數多少不確定,面對這樣的情況要如何解決呢?可變引數的寫法請參考下面的例子 package com.ycao.argstest public class varargs 另外一種傳參方式,說明這種傳參方法本質就是陣列 型別後面加三個點即 說明這個方法的引數不...

c帶可變引數的巨集

在99版本的iso c標準中,定義了巨集可以接受可變引數,就如同函式一樣,例如 define debug format,fprintf stderr,format,va args 這裡的 就是可變引數,呼叫時會替代巨集體裡的 va args define debug format,args.fpri...

帶引數方法

一 帶引數的方法 語法 訪問修飾符 方法返回值型別 方法名稱 引數列表 例如 public void seachname string name,int start,int end 每乙個引數之間用 分隔 二 形參和實參 形參 在方法定義時指定的引數 實參 在方法呼叫時指定的引數 三 呼叫帶引數方法...