C与指针学习笔记——可变参数和printf函数

来源:互联网 发布:多目标粒子群算法程序 编辑:程序博客网 时间:2024/05/17 02:42
#include<stdarg.h>#include<stdio.h>int m_sum(int num,...){va_list var;int count;int sum=0;va_start(var,num);for(count=0;count<num;count++){sum+=va_arg(var,int);}va_end(var);return sum;}int main(int argc,char **argv){printf("sum1:%d",m_sum(3,5,2,2));printf("sum2:%d",m_sum(5,5,6,74,21,4));getchar();}


可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件。需要使用类型va_list和三个宏——va_start,va_arg和va_end来实现可变参数的访问。

下面是自己写的模仿printf函数:

#include<stdio.h>#include<stdarg.h>#define INT 'd'#define FLOAT 'f'void print(char *msg,...){int i=5;double f=25.2;printf("%d ",i);printf("%f \n",f);va_list var_arg;va_start(var_arg,msg);while(*msg!='\0'){if(*msg=='%'){msg++;if(*msg==INT){i=va_arg(var_arg,int);printf("%d",i);msg++;continue;}else if(*msg==FLOAT){f=va_arg(var_arg,double);printf("%f",f);msg++;continue;}else{msg--;}}printf("%c",*msg);msg++;}va_end(var_arg);}void main(){int a=115;double d=24.335;print("print int:%d %d,print float:%f %f\n",a,a+10,d,d-5);}

代码写得不好,仅起到示例作用

原创粉丝点击