白话/图示 可变参数的函数执行流程
#include <stdio.h>
#include <stdarg.h>
void pp(char *fmt,...)
{
char *arg;
int i;
double d;
char c;
char *s;
printf("%s",fmt);
arg=(char *)&fmt+4;
i=*(int *)arg;
printf("%d",i);
arg+=sizeof(int);
d=*(double *)arg;
printf("%f",d);
arg+=sizeof(double);
c=*(char *)arg;
printf("%c",c);
arg+=sizeof(char *);
c=*(char *)arg;
printf("%c",c);
arg+=sizeof(char *);
s=*(char **)arg;
printf("%s",s);
arg+=sizeof(char *);
arg = (void *)0;
}
void ppp(char *fmt,...)
{
va_list args=NULL;
va_start (args, fmt);
printf("%s\n",fmt);
printf("%d",*(char *)(args));
printf("%f",*(double *)(args+4));
printf("%c",*(char *)(args+4+8));
printf("%c",*(char *)(args+4+8+4));
printf("%s",*(char **)(args+4+8+4+4));
va_end (args);
}
int main(void)
{
//printf("hello\n%d%f%c%c%s",3,3.6,'\n','a',"world\n");
//pp("hello\n",3,3.6,'\n','a',"world\n");
ppp("hello\n%d%f%c%c%s",3,3.6,'\n','a',"world\n");
return 0;
}