结构体宏观上可以当做变量看待,可以作为函数参数,也可以作为函数返回值。再软件编程上的使用,可以与C++的类,封装的功能平分天下。
将一个结构体变量中的数据传递给另一个函数,有下列3种方法:
用结构体变量名作参数。一般较少用这种方法。
用指向结构体变量的指针作实参,将结构体变量的地址传给形参。
用结构体变量的引用变量作函数参数。
案例说明:
有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中为各成员赋值,在另一函数print中将它们的值输出。
1) 用结构体变量作函数参数。
Student stu; //定义结构体变量
print(stu); //调用print函数,输出stu各成员的值
//void print(Student st)
结论:用结构体变量作实参和形参,程序直观易懂,效率是不高的。
2)用指向结构体变量的指针作实参
Student stu; //定义结构体变量
Student *pt=&stu; //定义基类型为Student的指针变量pt,并指向stu
print(pt); //实参为指向Student类数据的指针变量
// void print(Student *p)
结论:采用指针变量作为实参和形参,空间和时间的开销都很小,效率较高。没有(1)的直观。
3) 用结构体变量的引用作函数参数
Student stu; //定义结构体变量
print(stu);
//void print(Student &stud)
结论:实参是结构体Student类型变量,而形参用Student类型的引用,虚实结合时传递的是stu的地址,因而效率较高。它兼有(1)和(2)的优点。
其实与变量是一样的,值传递、指针、引用。
如下,指针操作获取信息:
StudentInfo stuOne;
memset(stuOne,0,sizeof(StudentInfo));
iRetValue = getStudentInfo(&stuOne); // 调用函数
if (iRetValue ==OK) printf(“pass\r\n”);
//调用函数
INT32 getStudentInfo(StudentInfo *pStudentInfo)
{
// 先对输入的指针参数进行异常判断
if (pStudentInfo == NULL) return;
strncpy((char *)pStudentInfo, Stu, sizeof(StudentInfo)); // 赋值操作
return 0; // 赋值成功, 返回0
}
http://blog.csdn.net/tham_/article/details/45370607 tham_ 这篇看起来太累,但详细。