2016-01-29 34 views
1

我試圖在調用參數列表中的va_arg時訪問下一個或上一個元素。 「n」實際上是參數列表的長度。C中的參數列表:遞增/遞減va_arg?

va_list pointer; 

va_start(pointer, n); 
int temp = va_arg(pointer, int); 
... 
if(temp < va_arg(pointer, int))... 
... 

void va_end(va_list pointer) 

實際上是否可以交換參數列表的兩個位置? 與bubblesort中兩個整數的交換一樣。

+0

從你的代碼看來,你似乎可能需要一個數組...... – edmz

+0

這是可能的,但作爲函數的參數是通過值傳遞的,它們將在返回到主代碼後被銷燬。那會是什麼目的? –

回答

2

您從va_*「函數」(它們通常作爲預處理器宏實現)的「列表」是堆棧的一部分,作爲真正的堆棧,您只能「彈出」它的值。

所以不,你不能「交換」價值,或倒退。你甚至不能「推」價值,只能「流行」。

如果要交換值,則必須將兩個值都變爲變量,然後交換這些變量的值。

+0

是的,它確實是一堆參數,因此你甚至不知道它在哪裏結束。 – edmz

+0

謝謝!這有助於很多。 – simonphumin

+0

這是常見的用法,當某些答案*有很大幫助時,將其標記爲**答案**,因此答覆者可以因爲給你時間解釋而付出努力。 –