C语言和指针-回顾22-可变参数列表

 

例子:

两个注意点:

  1. 可变参数里面char会被扩展成int
  2. 使用printf一次性打印所有可变参数时,第一个可变参数会在最后才被打印(反方向打印)。
#include<stdio.h>

#include <stdio.h>
#include <stdarg.h>

void SHA_Init(char *my_string, ...)
{
    printf("%s\n",my_string);
    va_list my_va_list;
    va_start(my_va_list, my_string);
    printf("%d ",va_arg(my_va_list,int));
    printf("%d ",va_arg(my_va_list,int));
    printf("%d ",va_arg(my_va_list,int));
    printf("%c ",va_arg(my_va_list,int));
    printf("%c ",va_arg(my_va_list,int));
    printf("%c ",va_arg(my_va_list,int));
    printf("%s\n",va_arg(my_va_list,char*));
    va_end(my_va_list);
    printf("%s\n",my_string);
}

void SHA_Init_2(char *my_string, ...)
{
    printf("%s\n",my_string);
    va_list my_va_list;
    va_start(my_va_list, my_string);
    vprintf("%d,%d,%d,%c,%c,%c,%s\n", my_va_list);
    va_end(my_va_list);
    printf("%s\n",my_string);
}

/* strange case */
void SHA_Init_3(char *my_string, ...)
{
    printf("%s\n",my_string);
    va_list my_va_list;
    va_start(my_va_list, my_string);
    printf("%s %c %c %c %d %d %d\n",
        va_arg(my_va_list,char*),
        va_arg(my_va_list,int),
        va_arg(my_va_list,int),
        va_arg(my_va_list,int),
        va_arg(my_va_list,int),
        va_arg(my_va_list,int),
        va_arg(my_va_list,int));
    va_end(my_va_list);
    printf("%s\n",my_string);
}

void SHA_Log(char *format, ...)
{
   va_list args;
   
   va_start(args, format);
   vprintf(format, args);
   va_end(args);
}

int main ()
{
    SHA_Init("**************************************",1,2,3,'A','B','C',"I love SHA!!!");
    SHA_Init_2("+++++++++++++++++++++++++++++++++++",1,2,3,'A','B','C',"I love SHA!!!");
    SHA_Init_3("-----------------------------------",1,2,3,'A','B','C',"I love SHA!!!");
    SHA_Log("%s Love %s\n", "I", "SHA");
    return(0);
}

Output :

**************************************
1 2 3 A B C I love SHA!!!
**************************************
+++++++++++++++++++++++++++++++++++
1,2,3,A,B,C,I love SHA!!!
+++++++++++++++++++++++++++++++++++
-----------------------------------
I love SHA!!! C B A 3 2 1
-----------------------------------
I Love SHA

posted @ 2021-07-10 15:52  Erden  阅读(52)  评论(0编辑  收藏  举报