“...”是英文中的省略號、運算符,可以當作省略符號使用,在網路用語中可表示無奈或無語。在c語言中可代表聲明可變參數函式或定義可變參數函式。
基本介紹
- 中文名:...
- 用途:等同於“..”,“汗...”“寒.."
- 含義:無語、無奈、被嚇到的意思
- 性質:英文中的省略號等
用法,運算符,C語言中,C++中,Java中,
用法
1、英文中的省略號。
3、在Windows作業系統中"運行"對話框鍵入"..."可打開”檔案資源管理器“。
4、在網路聊天中, “...”通常可以表示無語、被冷到、被傷到、被寒到等等諸多感受,或在無話可說無感受時回復發言者.
5、用途——等同於“..”,“汗..”“寒..”即無語、被雷到的意思……
運算符
C語言中
可變參數函式(Variadic functions)是stdarg.h內容典型的套用,雖然也可以使用在其他由可變參數函式調用的函式(例如,vprintf)。
聲明可變參數函式
可變參數函式的參數數量是可變動的,它使用省略號來忽略之後的參數。例如printf函式一般。代表性的聲明為:
int check(int a, double b, ...);
可變參數函式最少要有一個命名的參數,所以
char *wrong(...);
在C中是不被允許的(在C++中,這樣的聲明是合理的)。C中,省略符號之前必須要有逗號;而在C++中,則沒有這種強制要求。
定義可變參數函式
使用相同的語法來定義:
longfunc(char,double,int,...);longfunc(chara,doubleb,intc,...){/*...*/}//在C的舊形式中可能會出現較省略的函式定義:longfunc();chara;doubleb;longfunc(a,b,c,...){/*...*/}
訪問未命名的參數,首先必須在可變參數函式中聲明va_list類型的變數。調用va_start並傳入兩個參數:第一個參數為va_list類型的變數,第二個為省略號前最後一個有名字的參數的名稱,接著每一調用va_arg就會返回下一個參數,va_arg的第一個參數為va_list,第二個參數為返回的類型。最後va_end必須在函式返回前被va_list調用(va_list當作參數)(沒有要求要讀取完所有參數)。
C99提供額外的宏,va_copy,它能夠複製va_list。而va_copy(va2, va1)函式作用為拷貝va1到va2。
沒有機制定義該怎么判別傳遞到函式的參數量或者數據類型。函式通常需要知道或確定它們變化的方法。共通的慣例包含:
使用printf或scanf類的格式化字串來嵌入明確指定的類型。
在可變參數最後的標記值(sentinel value)。
總數變數來指明可變參數的數量。
C++中
C++11中可變參數模板讓您能創建則樣的模板函式或模板類,即接受可變數量的參數。
聲明方法: template <typename... Types> //...
例如:
template<typenameT,typename...Args>voidshow_list(Tvalue,Args...args){cout<<value<<endl;show_list(args);//遞歸調用,顯示下一項}
Java中
在編寫一個方法時,其參數隨著程式運行的條件而變化,在編譯期間無法確定。具體地講,例如編寫一個列印參加聚會party的程式,其中方法printInvitation()將根據作為參數的參加人姓名,列印邀請卡。但這個參數的數量事先並不確定。當然可以編寫許多重載的方法來解決這個問題,如:
void printInvitation(String name);
void printInvitation(String name1, Stringname2);
void printInvitation(String name1, Stringname2, String name3);
問題是編寫多少個重載的方法才可以解決給所有參加者列印邀請卡?也許需要改變您的程式設計,而使用數組或者連結表了。
套用可變參數可以方便、靈活地解決這類問題。例如:
void printInvitation(String...names) {
for (String name : names) {
makeCard(name); //調用方法按照姓名列印邀請卡
System.out.println("Recording info: invitation card has been printed for " + name);
}
}
這裡,(String...names)便是可變參數。它包括從0到任意個相同類型的參數。在編譯期間,這個可變參數將被轉換為字元串數組形式,即:void printInvitation(String names).
如下是調用這個方法的例子:
printInvitation("李剛", "David Smith");
printInvitation("Greg Wu", "Paul Nguyen", "Liu Wei", "張新");
printInvitation(); //無參數
當在無參數情況下調用這個方法時,將不執行任何這個方法中的代碼。
如下是運行結果:
Recording info: invitation card has been printed for 李剛
Recording info: invitation card has been printed for David Smith
Recording info: invitation card has been printed for Greg Wu
Recording info: invitation card has been printed for Paul Nguyen
Recording info: invitation card has been printed for Liu Wei
Recording info: invitation card has been printed for 張新