C语言结构体与函数

简介: 结构体与函数

首先结构体做函数参数有三种传递方式

一是传递结构体变量,这是值传递,二是传递结构体指针,这是地址传递,三是传递结构体成员,当然这也分为值传递和地址传递。

以传引用调用方式传递结构比用传值方式传递结构效率高。以传值方式传递结构需要对整个结构做一份拷贝。

下面看一个列子,student结构体中包含该学生的各种信息,我们在change函数中对其进行部分修改,再在主函数中输出其结果

1.下面传递结构体变量

#include<stdio.h>

#include<string.h>

#define format "%d\n%s\n%f\n%f\n%f\n"

structstudent

{

   intnum;

   charname[20];

   floatscore[3];

};

voidchange( structstudentstu );

intmain()

{

   

   structstudentstu;

   stu.num=12345;

   strcpy(stu.name, "Tom");

   stu.score[0] =67.5;

   stu.score[1] =89;

   stu.score[2] =78.6;

   change(stu);

   printf(format, stu.num, stu.name, stu.score[0], stu.score[1],stu.score[2]);

   printf("\n");

   return0;

}

voidchange(structstudentstu)

{

   stu.score[0] =100;

   strcpy(stu.name, "jerry");

}

image.png

可以看到最终输出的值并未改变。。。2.地址传递

<spanstyle="font-family:Arial Black;font-size:12px;">#include<stdio.h>

#include<string.h>

#define format "%d\n%s\n%f\n%f\n%f\n"

structstudent

{

   intnum;

   charname[20];

   floatscore[3];

};

voidchange( structstudent*stu );

intmain()

{

   

   structstudentstu;

   stu.num=12345;

   strcpy(stu.name, "Tom");

   stu.score[0] =67.5;

   stu.score[1] =89;

   stu.score[2] =78.6;

   change(&stu);

   printf(format, stu.num, stu.name, stu.score[0], stu.score[1],stu.score[2]);

   printf("\n");

   return0;

}

voidchange(structstudent*p)

{

   p->score[0] =100;

   strcpy(p->name, "jerry");

}</span>

image.png

可以看到,通过地址传递修改了结构体内的数据

用&stu做实参,&stu是结构体变量stu的地址。在调用函数时将该地址传送给形参p(p是指针变量)。这样p就指向stu。

在change函数中改变结构体内成员的值,在主函数中就输出了改变后的值

3.结构体成员的地址传递和值传递

这个类似于单一变量的传递,这里也没必要说了,当然是地址传递才能修改。

把一个完整的结构体变量作为参数传递,要将全部成员值一个一个传递,费时间又费空间,开销大。如果结构体类型中的成员很多,或有一些成员是数组,则程序运行效率会大大降低。在这种情况下,用指针做函数参数比较好,能提高运行效率。

目录
相关文章
|
7天前
|
存储 C语言
向函数传递结构体: C语言中的结构体参数传递详解
向函数传递结构体: C语言中的结构体参数传递详解
20 0
|
1天前
|
存储 API C语言
C语言函数大全--b开头的函数
【6月更文挑战第2天】本篇介绍 C语言中 b开头的函数【C语言函数大全】
14 7
C语言函数大全--b开头的函数
|
2天前
|
C语言
【初始C语言8】详细讲解初阶结构体的知识
【初始C语言8】详细讲解初阶结构体的知识
|
2天前
|
C语言 存储 编译器
C语言函数大全--a开头的函数
【6月更文挑战第1天】本篇介绍 C语言中 a开头的函数【C语言函数大全】
14 2
C语言函数大全--a开头的函数
|
3天前
|
C语言
malloc()函数
`malloc()`是C语言中的动态内存分配函数,用于分配指定大小的内存块,并返回一个`void*`类型的指针。要包含`stdlib.h`头文件来使用它。分配的内存大小以字节为单位,成功则返回内存首地址,失败则返回`NULL`。需要注意的是,返回的指针需强制转换为所需类型,并在使用后用`free()`释放内存,避免内存泄漏。切勿在分配区域内移动指针,以防止释放时出现问题。
|
5天前
|
Serverless C语言
C语言函数详解与实战应用
C语言函数详解与实战应用
9 1
|
5天前
|
算法 C语言
C语言函数递归调用详解与实战应用
C语言函数递归调用详解与实战应用
12 0
|
5天前
|
C语言
C语言函数的嵌套调用详解
C语言函数的嵌套调用详解
10 1
|
5天前
|
存储 算法 C语言
C语言中的结构体与共用体:深入探索与应用
C语言中的结构体与共用体:深入探索与应用
9 0