结构体作为函数参数

 结构体宏观上可以当做变量看待,可以作为函数参数,也可以作为函数返回值。再软件编程上的使用,可以与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_   这篇看起来太累,但详细。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值