继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

C语言:浅谈结构指针、以及向函数传递结构信息的三种方法

慕森王
关注TA
已关注
手记 395
粉丝 107
获赞 550

一、结构指针

结构指针即指向结构的指针,为什么要使用结构指针,主要有一下三点原因:

①就像指向数组的指针比数组不本身更容易操作(例如在一个排序问题中)一样,指向结构的指针通常比结构本身更容易操作
②在一些早期的C实现中,结构不能作为参数被传递给函数,但指向结构的指针可以
③许多奇妙的数据表示都使用了不包含指向其他结构的指针的结构

介绍一个运算符(“->”),称为“间接成员运算符”

这个运算符与指向结构或联合的指针一起使用,用来指明结构或联合的成员。假设ptstru是一个指向结构的指针,member是由该结构模板指定的一个变量的成员,那么:ptstru ->member 就表示指向的结构的成员

声明和初始化结构指针

声明很简单,例如:

  1. struct student *p  

结构指针的初始化

结构指针本质是指针,既然是指针,那么传入的就应该是地址,所以初始化应该如下:


  1. p = &stu //stu以struct student 为模板  

二、向函数传递结构信息的方法
②用结构体变量作实参
③用指向结构体变量(或数组)的指针作实参,将结构体变量(或数组)的地址传给形参

接下来分别举例解释这几种方法:我们首先定义一个student结构体如下:

  1. struct student{  

  2.     int num;  

  3.     char name[20];  

  4.     float score[3];  

  5. };  

用结构体变量的成员作实参

这里写了一段代码来实现结构体的打印的功能,在print函数中传入了整个结构体变量

  1. #include<stdio.h>  

  2.   

  3. struct student{  

  4.     int num;  

  5.     char name[20];  

  6.     float score[3];  

  7. };//定义结构体  

  8.   

  9. struct student stu = {  

  10.     .num = 1702,  

  11.     .name = "Linden",  

  12.     .score = {99.7,99.2,98.9}  

  13. };//结构体变量初始化  

  14.   

  15. void print(struct student);//声明print函数  

  16.   

  17. void main()  

  18. {  

  19.     print(stu);//使用整个结构体变量作实参  

  20. }//主函数  

  21.   

  22. void print(struct student stu)  

  23. {  

  24.     printf("%d\n",stu.num);  

  25.     printf("%s\n",stu.name);  

  26.     printf("%.2f\n",stu.score[0]);  

  27.     printf("%.2f\n",stu.score[1]);  

  28.     printf("%.2f\n",stu.score[2]);  

  29. }//print函数,注意struct student为变量类型,stu为形参  

  30.    

执行结果:

用指向结构体变量的指针作实参

对代码作如下修改:

  1. #include<stdio.h>  

  2.   

  3. struct student{  

  4.     int num;  

  5.     char name[20];  

  6.     float score[3];  

  7. };  

  8.   

  9. struct student stu = {  

  10.     .num = 1702,  

  11.     .name = "Linden",  

  12.     .score = {99.7,99.2,98.9}  

  13. };  

  14.   

  15. void print(struct student *);//函数声明,变量为指向struct student结构体类型的指针  

  16.   

  17. void main()  

  18. {  

  19.     print(&stu);//既然形参是一个指针,那传入的实参就应该是一个地址  

  20. }  

  21.   

  22. void print(struct student *p)//选用一个struct student类型的指针变量,并把它命名为p  

  23. {  

  24.     printf("%d\n",p -> num);//有指针的情况下使用间接成员操作符,调用结构体里面的成员  

  25.     printf("%s\n",p -> name);  

  26.     printf("%.2f\n",p -> score[0]);  

  27.     printf("%.2f\n",p -> score[1]);  

  28.     printf("%.2f\n",p -> score[2]);  

  29. }  

同样可以得到一样的运行结果:

原文出处






打开App,阅读手记
3人推荐
发表评论
随时随地看视频慕课网APP