/*
file function_param.c
author:chinanetboy
function:input /output with param
date:06/22/2009
blog:http://blog.csdn.net/chinayaosir
tool:vc++6.0
*/
实际上要模仿的是函数参数的4种调用方式f(in,out),f(in,in),f(out,in),f(out,out)
f_call_in_out(&a,&b);
参数调用的第1种模式f(IN,OUT)
说明:a设成输入参数,函数处理后输出结果放在参数b,返回值通过参数b实现
f_call_in_in (&a,&b);
参数调用的第2种模式f(IN,IN)
说明:a是输入参数,b也是输入参数,函数没有返回值
f_call_out_in(&a,&b);
参数调用的第3种模式f(OUT,IN)
说明:a是函数返回值,b是输入参数,返回值通过参数a实现
f_call_out_out(&a,&b);
参数调用的第4种模式f(OUT,OUT)
说明:函数没有输入参数,a是函数返回值,b也是返回值,返回多个参数
#include "stdio.h"
typedef struct dateday
{
int yy,mm, dd;
}date;
void day_begin();
void day_init(date* a,date* b);
void f_call_in_out(date* in,date* out);
void f_call_in_in(date* in1,date* in2);
void f_call_out_in(date* out,date* in);
void f_call_out_out(date* out1,date* out2);
int main()
{
date a,b;
day_begin();
day_init(&a,&b);//init a,b
f_call_in_out(&a,&b);//IN/OUT WITH CALL PARAM
day_init(&a,&b);//init a,b
f_call_in_in(&a,&b);//IN/IN WITH CALL PARAM
day_init(&a,&b);//init a,b
f_call_out_in(&a,&b);//OUT/IN WITH CALL PARAM
day_init(&a,&b);//init a,b
f_call_out_in(&a,&b);//OUT/OUT WITH CALL PARAM
return 0;
}
void day_begin()
{
printf("day struct (int mm,dd,yyyy)/n");
printf("testting call function param with(in/in,in/out,out/in,out/out)/n");
}
void day_init(date* a,date* b)
{
(a->yy)=2009,(a->mm)=2,(a->dd)=22;
(b->yy)=2000,(b->mm)=1,(b->dd)=11;
printf("day_init() day a,b /n");
printf("a=%d/%d/%d/t",(a->mm),(a->dd),(a->yy));
printf("b=%d/%d/%d/n",(b->mm),(b->dd),(b->yy));
}
void f_call_in_out(date* in,date* out){
printf("f_call_in_out()param in,out....../n");
out->yy=++(in->yy);
out->mm=++(in->mm);
out->dd=++(in->dd);
printf("in=%d/%d/%d/t",(in->mm),(in->dd),(in->yy));
printf("out=%d/%d/%d/n",(out->mm),(out->dd),(out->yy));
}
void f_call_in_in(date* in1,date* in2)
{
printf("f_call_in_in() param in,in....../n");
++(in1->yy),++(in1->mm),++(in1->dd);
++(in2->yy),++(in2->mm),++(in2->dd);
printf("in1=%d/%d/%d/t",(in1->mm),(in1->dd),(in1->yy));
printf("in2=%d/%d/%d/n",(in2->mm),(in2->dd),(in2->yy));
}
void f_call_out_in(date* out,date* in)
{
printf("f_call_out_in() param out,in....../n");
out->yy=++(in->yy);
out->mm=++(in->mm);
out->dd=++(in->dd);
printf("out=%d/%d/%d/t",(out->mm),(out->dd),(out->yy));
printf("in=%d/%d/%d/n",(in->mm),(in->dd),(in->yy));
}
void f_call_out_out(date* out1,date* out2)
{
printf("f_call_out_out() param out,out....../n");
++(out1->yy),++(out1->mm),++(out1->dd);
++(out2->yy),++(out2->mm),++(out2->dd);
printf("out1=%d/%d/%d/t",(out1->mm),(out1->dd),(out1->yy));
printf("out2=%d/%d/%d/n",(out2->mm),(out2->dd),(out2->yy));
}
/*
code run value,see blow
day struct (int mm,dd,yyyy)
testting call function param with(in/in,in/out,out/in,out/out)
day_init() day a,b
a=2/22/2009 b=1/11/2000
f_call_in_out()param in,out......
in=3/23/2010 out=3/23/2010
day_init() day a,b
a=2/22/2009 b=1/11/2000
f_call_in_in() param in,in......
in1=3/23/2010 in2=2/12/2001
day_init() day a,b
a=2/22/2009 b=1/11/2000
f_call_out_in() param out,in......
out=2/12/2001 in=2/12/2001
day_init() day a,b
a=2/22/2009 b=1/11/2000
f_call_out_in() param out,in......
out=2/12/2001 in=2/12/2001
Press any key to continue
*/