C语言之struct参数传递与结构匹配

本文介绍了C语言中结构体struct的特性,包括结构体变量的定义、赋值以及作为函数参数的传递方式。结构体可以包含不同数据类型,并允许相互赋值。当结构体作为函数参数时,会按成员值一一传递,相比数组有较大开销。此外,结构体的赋值需要确保结构匹配,否则会导致编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同:

首先结构体可以在一个结构中声明不同的数据类型,;

第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称可看作常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。


由于结构体本身就是自定义的数据类型,定义结构体变量的方法和定义普通变量的方法一样。
结构体,同样是可以定义指针的,那么结构体指针就叫做结构指针。


2、结构体作函数参数可以整个结构体作函数参数。
整个结构体作函数参数,必须保证实参与形参的类型相同,实际上是将实参结构体成员值对应传递给形参结构体成员。数组传递的是首地址。
虽然结构体能整体作函数参数,但要将全部成员值一个一个传递,开销比较大。

 


结构体数组看上去与一般数组类似,也是一种数据类型,一组数据。
但结构体作为参数,是一组数据的collection,因此,不同于数组(只传递首地址,蜕化成指针),而是将所有成员变量都复制。因此,一般使用指针较好。

 

3、struct不是进行类型匹配,而是结构匹配。
 1 #include <stdio.h>
 2
 3 struct
 4 {
 5                 char a;
 6                 int b;
 7 } Sa = {'a', 1};
 8 struct
 9 {
10                 char a;
11                 int b;
12 } Sb = Sa;
13
14 int main()
15 {
16         1;
17         return 0;
18 }

编译结果:
t.c:12: error: invalid initializer

虽然两个struct看上去类似,由于上一篇文章提到的可能存储分配不同,导致结构不匹配,不能赋值。
可以进行如下改进:
struct stru

{
                  char a;
                  int b;
};

struct stru Sa =  {'a', 1};

struct stru Sb = Sa;

这样,两个结构体变量结构匹配了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值