您的位置:首页 > 编程语言 > C语言/C++

C语言结构体做参数易错情况分析

2015-09-18 10:03 465 查看
程序示例:

#include <stdlib.h>
#include <stdio.h>

struct Test										//声明一个结构体
{
char member1[64];
int	 member2;
float member3;
};

void copyMember(Test temp1, Test temp2)			//目的为了copy结构体t1的值给t2
{
temp2 = temp1;
}

int main()
{
Test t1 = { "abc", 2015, 9.47 };
Test t2 = {};

printf("调用复制前结构体成员的值:\n");
printf("t1.member1:%s\nt1.member2:%d\nt1.member3:%f\n", t1.member1, t1.member2, t1.member3);
printf("t2.member1:%s\nt2.member2:%d\nt2.member3:%f\n", t2.member1, t2.member2, t2.member3);

copyMember(t1, t2);		//调用复制函数
printf("调用复制后结构体成员的值:\n");
printf("t1.member1:%s\nt1.member2:%d\nt1.member3:%f\n", t1.member1, t1.member2, t1.member3);
printf("t2.member1:%s\nt2.member2:%d\nt2.member3:%f\n", t2.member1, t2.member2, t2.member3);

system("pause");
return 0;
}

/*运行结果
*调用复制前结构体成员的值:
t1.member1:abc
t1.member2:2015
t1.member3:9.470000
t2.member1:
t2.member2:0
t2.member3:0.000000
调用复制后结构体成员的值:
t1.member1:abc
t1.member2:2015
t1.member3:9.470000
t2.member1:
t2.member2:0
t2.member3:0.000000
请按任意键继续. . .
*/

根据结果可以看出,并没有完成对结构体成员的复制,这是因为copyMember()函数只对函数中临时变量temp1,temp2进行了交换,根本就没有对t1,t2进行操作,所以

正确做法应该这样:
#include <stdlib.h>
#include <stdio.h>

struct Test										//声明一个结构体
{
char member1[64];
int	 member2;
float member3;
};

void copyMember(Test *temp1, Test *temp2)			//目的为了copy结构体t1的值给t2,定义为结构指针
{
*temp2 = *temp1;					//copy值
}

int main()
{
Test t1 = { "abc", 2015, 9.47 };
Test t2 = {};

printf("调用复制前结构体成员的值:\n");
printf("t1.member1:%s\nt1.member2:%d\nt1.member3:%f\n", t1.member1, t1.member2, t1.member3);
printf("t2.member1:%s\nt2.member2:%d\nt2.member3:%f\n", t2.member1, t2.member2, t2.member3);

copyMember(&t1, &t2);		//调用复制函数,  将t1,t2的地址传过去
printf("调用复制后结构体成员的值:\n");
printf("t1.member1:%s\nt1.member2:%d\nt1.member3:%f\n", t1.member1, t1.member2, t1.member3);
printf("t2.member1:%s\nt2.member2:%d\nt2.member3:%f\n", t2.member1, t2.member2, t2.member3);

system("pause");
return 0;
}

/*运行结果
调用复制前结构体成员的值:
t1.member1:abc
t1.member2:2015
t1.member3:9.470000
t2.member1:
t2.member2:0
t2.member3:0.000000
调用复制后结构体成员的值:
t1.member1:abc
t1.member2:2015
t1.member3:9.470000
t2.member1:abc
t2.member2:2015
t2.member3:9.470000
请按任意键继续. . .
*/
复制完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: