C语言结构体做参数易错情况分析
2015-09-18 10:03
465 查看
程序示例:
根据结果可以看出,并没有完成对结构体成员的复制,这是因为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; } 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 请按任意键继续. . . */复制完成。
相关文章推荐
- c++ 类的对象与指针
- C++ 继承中的一个小知识点
- iOS开发之SQLite--C语言接口规范(三)——Binding Values To Prepared Statements
- C语言运算符优先级列表
- C语言中数组的几种输入
- C语言读入多组数并打印数值和
- C/C++专项练习 (一)
- 我的第一份工作的得与失
- C++ json库jsoncpp 吐槽
- C语言中extern的用法
- 【第3周 项目4 - 顺序表应用】
- c语言结构体中的冒号的用法
- 第3周项目1 顺序表的基本运算
- 【第3周 项目3 - 求集合并集】
- c++反汇编学习笔记----------2.整型运算的编译器优化
- makefile---单个源文件,单个可执行文件(C/C++)
- c++反汇编学习笔记----------1.基本数据类型
- C++Primer第五版 10.4.1节练习
- C++Primer第五版 10.3.4节练习
- C++Primer第五版 10.3.3节练习