可变参数

来源:互联网 发布:南山空同 知乎 编辑:程序博客网 时间:2024/05/01 10:51

关于可变参数的代码实现:

/* 可变参数需要包含一个头文件 :stdarg.h */#include<stdarg.h>#include<stdio.h>#include<stdlib.h>/* ... 代表可变参数 */void myprintf(char *ptstr,...){/*va_list定义: typedef char *  va_list;*/va_list ap;//起始点va_start(ap, ptstr);//从ap开始读取ptstrchar flag;while (*ptstr) // \0 的值是 0 所以可以这样写 {flag = *ptstr;//取出字符if (*ptstr != '%'){putchar(flag);//打印字符}else{/* 如果遇到 % 字符则继续向前读取一个字符 */ptstr++;  //可能遇到 %d %c %s %% 分几种情况区别对代flag = *ptstr; switch (flag){case 'd':{int data = va_arg(ap, int);//读取下一个参数按照intprintf("%d", data);break;}case 'c':{char ch = va_arg(ap, char);//读取下一个参数按照char printf("%c", ch);break;}case 'f':{float  f = va_arg(ap, float);//读取下一个参数按照 float printf("%f", f);break;}case 's':{char *str = va_arg(ap, char *);//读取下一个参数按照char *printf("%s", str);break;}case '%':break;}}ptstr++;}va_end(ap);//结束读取}void main(){printf("printf: 123abc\n");myprintf("myprintf: 123abc\n");printf("printf: 123abc%d\n", 10);myprintf("myprintf: 123abc%d\n", 10);printf("123abc%d%s\n", 10,"sadfsdf");system("pause");}


0 0
原创粉丝点击