首页 理论教育 C语言:结构体指针引用

C语言:结构体指针引用

时间:2023-10-29 理论教育 版权反馈
【摘要】:引入结构体指针,即用指针变量作为函数参数进行传递,这时由实参传向形参的只是地址,从而减少了时间和空间的开销。在调用函数过程中用结构体指针*stu做参数,并将修改后的值返回,最后将信息输出。这种方式采取“值传递”的方式,将结构体变量所占的内存单元的内容全部顺序传递给形参。并且在调用函数期间,仅仅建立了一个指针变量,大大地减少了系统的开销。

C语言:结构体指针引用

在编写程序时,可以用结构体变量作为函数参数进行传递。但是这种方式耗费的时间和空间很大,每个成员要逐个进行值传送,特别是成员为数组时,严重降低了程序的运行效率。引入结构体指针,即用指针变量作为函数参数进行传递,这时由实参传向形参的只是地址,从而减少了时间和空间的开销。

【例8.6】用结构体指针做参数,修改结构体变量的值。

程序内容如下:

1 /*这是一个有关于结构体指针知识讲解的事例程序*/

2 #include<stdio.h>

3 #include<string.h>

4 struct Student                 //定义结构体类型

5 {

6  char name[20];

7  int num;

8  char gender;

9  float score;

10 };

11 void modify(struct Student*stu)       //结构体指针作为函数参数

12 {

13  char str[20]="Zhang jun";

14  strcpy((*stu).name,str);

15  (*stu).num=20180306;

16  (*stu).score=92;

17 }

18 int main()(www.xing528.com)

19 {

20  struct Student stu={"Li lin",20180101,′F′,98};//定义结构体变量

21  printf("%-10s%8d%2c%8.2f\n",stu.name,stu.num,stu.gender,stu.score);

22  modify(&stu);               //调用函数modify

23  printf("%-10s%8d%2c%8.2f\n",stu.name,stu.num,stu.gender,stu.score);

24  return 0;

25 }

程序结果如图8.10所示:

图8.10 例8.6程序结果图

【例题中关键问题说明】

(1)本程序中,定义struct Studen结构体类型,在main函数中定义结构体变量stu并赋初始值.

(2)调用modify函数来修改结构体变量成员的值。在调用函数过程中用结构体指针*stu做参数,并将修改后的值返回,最后将信息输出。

需要注意:

将一个结构体变量中的数据传递给另一个函数,有以下三种方法。

(1)用结构体变量名作为参数。这种方式采取“值传递”的方式,将结构体变量所占的内存单元的内容全部顺序传递给形参。在函数调用期间形参也要占用内存单元。这种传递方式在空间和时间上开销较大,并且由于采用值传递方式,如果在函数被执行期间改变了形参的值,该值不能反映到主调函数中对应的实参,这往往不能满足使用要求。因此一般较少使用这种方法。

(2)用结构体变量的成员作参数。例如“stu[1].name”,这种用法和用普通变量是一样的,也属于“值传递”方式。

(3)用指向结构体变量的指针作为函数参数。这种方式虽然也是值传递的方式,但是这次传递的值却是指针。通过改变指针指向的结构体变量的值,可以间接改变实参的值。并且在调用函数期间,仅仅建立了一个指针变量,大大地减少了系统的开销。

对于数组,包括结构体数组,用指针作函数参数比较好,只传递地址肯定要比传递数组的所有数据效率更高。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈