可変パラメータリストの詳細


コードを献上!作成した簡単なシミュレーション簡単printf関数1.文字列「s」と文字「c」の処理を実現し、皆さんは自分で機能の完備を行うことができます!
//          printf();    
79.  
80.#include<stdio.h>  
81.#include<stdarg.h>  
82.  
83.void print(charchar *str, ...)  
84.{  
85.    const charchar *p = NULL;  
86.    char ch;  
87.    char c;  
88.    va_list arg;//    char        
89.  
90.    va_start(arg,str);  //          !
91.  
92.    while(*str)  
93.    {  
94.        switch(*str)  //switch              ,  !
95.        {  
96.        case 's':  
97.            p = va_arg(arg,const charchar *);  //      va_arg  ,         !
98.            while(*p)  
99.            {  
100.                putchar(*p);  
101.                p++;  
102.            }  
103.            ++str;  
104.            break;  
105.        case 'c':  
106.            ch = va_arg(arg,char);  
107.            putchar(ch);  
108.            ++str;  
109.            break;  
110.        case ' ':  //           ,         switch,       !
111.            ++str;  
112.            break;  
113.        case '
': 114. putchar('
'); 115. ++str; 116. break; 117. default: 118. break; 119. 120. 121. } 122. } 123. va_end(arg); // , arg NULL; 124.} 125. 126.int main() 127.{ 128. 129. print("s ccc
","hello",'b','i','t'); 130. //printf("%s","strstr"); 131. 132. return 0; 133.} 2. ! stdarg , stdarg.h , 。 va_list ——va_start、va_arg、va_end。 va_list , , 。
 
 int printf(const char *fmt, ...);

      ...      , c    ,           ,...           ,         。          :

    int printf(const char *fmt, ...)

    {

        int res;

        va_list arg;

        va_start(arg, fmt);

        res = vprintf(fmt, arg);

        va_end(arg);

        return res;

    }

              vprintf,             ,         vprintf    ,      。               min,             #define min(a, b) (a < b? a: b)    ,                   :

    int min(int n, int m, ...)

    {

        int tmp;

        int res = m;

        va_list arg;

        va_start(arg, m);

        while (--n > 1)

        {

             tmp = va_arg(arg,int);

             if (tmp < res)

                 res = tmp;

        }

        va_end(arg);

        return res;

    }
3.       
 java   ,C          ,       :</span>
     1、             。      printf      , cocos2d   NULL  
     2、        。           ,                     ,              ,         。              ,       printf
<span style="font-size:18px;">4.  </span>
<span style="font-size:18px;"><img alt="" src="http://pic002.cnblogs.com/images/2011/352816/2011120416573922.jpg" />ps</span>
<span style="font-size:18px;">
</span>