2011-09-20 37 views
0

可能重複:
What is the signature of printf?printf()函數中的參數列表是什麼?

我知道會有爲每個函數的參數列表。我們的問題是

printf()函數也有參數列表和事件雖然我們給'n'no.of參數 printf()函數不會失敗,然後

我想知道wht將用於printf()的參數列表部分,其中需要infinate參數列表?

+0

谷歌「c可變數量的參數」,並簽出'' –

+2

-1 *研究努力*。 StackOverflow不是谷歌的機械土耳其人。如果你谷歌你的問題標題,你會得到答案。 –

+0

在這裏發佈這個問題之前,你可以簡單地用它搜索它! –

回答

4

的printf的簽名看起來是這樣的:

int printf (const char * format, ...); 

如果一個函數有一個「...」作爲其最後一個參數,它可以接收任意數量的參數。在該函數中,您可以使用va_arg來訪問這些參數。下面是cplusplus.com一個例子:

/* va_start example */ 
#include <stdio.h> 
#include <stdarg.h> 

void PrintFloats (int amount, ...) 
{ 
    int i; 
    double val; 
    printf ("Floats passed: "); 
    va_list vl; 
    va_start(vl,amount); 
    for (i=0;i<amount;i++) 
    { 
    val=va_arg(vl,double); 
    printf ("\t%.2f",val); 
    } 
    va_end(vl); 
    printf ("\n"); 
} 

int main() 
{ 
    PrintFloats (3,3.14159,2.71828,1.41421); 
    return 0; 
} 

注意的是,這裏PrintFloats要求您的附加參數的數目傳遞。 printf不需要這樣做,因爲它可以通過計算格式字符串中的標記來推斷您傳入的參數數量。

-2

的關鍵詞是可變參數,並且它們與宣...

+1

您打算完成這項工作嗎?或者我們應該繼續前進,並且因爲它沒有真正回答問題而令人信服。 –

+1

它是完整的,請隨時downvote。我認爲網絡上有很多關於可變參數的解釋,並且在這裏不需要重複 - 這就是爲什麼我保持我的答案簡短的原因。 – thiton

+0

-1如果用於發佈「不完整」答案的參數是「網上提供的大量解釋」,那麼不應該麻煩回答。如果有人在意發佈答案,那麼最好是正確和完整的。 –

5

printf的是「可變參數」功能。這意味着參數列表最後聲明爲...,並且在執行printf時,使用va_list,va_start,va_arg等宏從可變長度列表中提取參數。

+0

(另外,從技術上講,參數列表並不是無限的 - 它受堆棧大小的限制。) – Vicky

相關問題