WJ看了很多同学写的程序,也指导过一些同学。程序是纯C的,但是并没有把C的优势发挥出来。
比如:怎么用一个函数返回多个值?下面,我来写几个例子,希望能给大家启发。
ex1:
////////////////////////////////////////////////////
//利用结构体返回多个计算之后的值
//下例一个函数返回加法和减法后的值
// whut_wj
///////////////////////////////////////////////////
typedef struct _DATA
{
int a;
int b;
}DATATYPE;
DATATYPE calculate(int x1,int x2)
{
DATATYPE staticdata;
staticdata.a=x1+x2;
staticdata.b=x1-x2;
return staticdata;
}
int main()
{
DATATYPE data=calculate(7,8);
printf("%d %d",data.a,data.b);
return 0;
}
ex2
/////////////////////////////////
///方法2:利用指针传递形参,并在Calculate函数里计算和与差
///计算结果通过形参又返回
///这种方法是一种常见的指针用法
///认真体会!!!!!!!!!
////whut_wj
/////////////////////////////////
void Calculate(int *a,int *b)
{
inttemp1=*a;
inttemp2=*b;
*a=temp1+temp2;
*b=temp1-temp2;
}
int main(int argc, char* argv[])
{
int x1=7;
int x2=8;
printf("计算前x1为%d x2为%d\r\n",x1,x2);
Calculate(&x1,&x2);
printf("计算后和为%d 差为%d\r\n",x1,x2);
return 0;
}
ex3
///////////////////////////////////
//利用指针函数返回计算后的值
//这是一种高级应用,必须常握!!
//认真体会new 和指针+1的意义!!
//whut_wj
/////////////////////////////////////
int * Calculat(int a,int b)
{
int *data=new int [2] ; //这句话必须new 而不能直接 int data[2] 否则应把 int data[2]放在全局变量中
// int data[2];如果把这句话代替上面的int *data=new int [2] 则不行,为什么,想想!
data[0]=a+b;
data[1]=a-b;
return data;
}
int main()
{
int a=7;int b=8;
int * result;
result=Calculat(7,8);
printf("和为%d,差为%d",*result,*(result+1));
return 0;
}
ex4
///////////////////////////////////
//利用引用返回值
//和指针区别开来,必须常握!!
//whut_wj
/////////////////////////////////////
voidCalculat(int a,int b,int &add,int &abs)
{
add=a+b;
abs=a-b;
}
int main()
{
int a=7;int b=8;int add,int abs;
printf("计算前:a=%d b=%d\r\n",a,b);
Calculat(7,8,add,abs);
printf("和为%d,差为%d\r\n",add,abs);
return 0;
}