C语言结构体初级

简介: 本文将介绍结构体初级用法,内容比较简单,但会对以后更难的学习打下基础。当然结构体也是一种很方便的存储复杂变量的形式,非常实用

一、为什么要用结构体

为了描述一个复杂类型的变量,如一个学生的数据,通常包括:性别,成绩,身高,体重等,将这些数据都存入一个集合中,这个集合就叫结构体

二、使用结构体的具体形式

结构体要想有效,就得先声明,再使用。

1.结构体类型的声明(main函数外部)

结构体成员的类型也是根据实际情况来定的,一般要看结构体对象有那些属性,对应的数据类型为啥就定义为啥,结构的成员可以是标量、数组、指针,甚至是其他结构体

2.结构体变量的定义(在main函数内或者外)

同样,可以将相同结构体类型的结构体变量放入一个数组中
那么数组S的数组元素就成了S[0]和S[1],在后续使用结构体时可以直接引用数组名+下标代替变量名。如S[0]就相当于S1,S[1]就相当于S2。

第二种方法:在main函数外,结构体后定义结构体变量特殊情况:使用typedef对结构体类型进行重定义

3.结构体变量的初始化

用大括号将结构体变量对应的所有结构体成员括起来,不同结构体成员之间用逗号隔开,如果是字符成员的话要用双引号引起来,按顺序对结构体变量进行初始化,如在结构体声明中先声明name,就要先初始化name,再声明age,就要再初始化age...

结构体按想要的顺序进行初始化的方法按想要的顺序:.结构体成员名1=,.结构体成员2=   ....


4.结构体成员的访问

(.)结构体成员访问操作符1,使用方法:结构体变量.结构体成员


(->)结构体成员访问操作符2,使用方法:结构体指针变量->结构体成员


使用方法案例具体见下面的结构体传参


5.结构体的传参

函数的传参可以参考:C语言函数详解


直接上代码

struct S
{
 int data[1000];
 int num;
};
struct S s = {{1,2,3,4}, 1000};
//结构体传参
void print1(struct S s)
{
 printf("%d\n", s.num);
}
//结构体地址传参
void print2(struct S* ps)
{
 printf("%d\n", ps->num);
}
int main()
{
 print1(s);  //传结构体
 print2(&s); //传地址
 return 0;
}

代码讲解:结构体传参有两种方式:直接传结构体变量;传结构体变量的地址


将结构体变量直接传参上去后,用(.)操作符访问结构体成员即可;将结构体变量的地址作为参数传上去后用(->)操作符访问结构体成员。


传结构体变量地址的好处:


函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。而传地址的时候只需要传4/8个字节,相对来说非常划算(地址大小在32位机器上是4个字节大小,在64位机器上是8个字节大小)


相关文章
|
2月前
|
存储 C语言
如何在 C 语言中实现结构体的深拷贝
在C语言中实现结构体的深拷贝,需要手动分配内存并逐个复制成员变量,确保新结构体与原结构体完全独立,避免浅拷贝导致的数据共享问题。具体方法包括使用 `malloc` 分配内存和 `memcpy` 或手动赋值。
45 10
|
2月前
|
存储 大数据 编译器
C语言:结构体对齐规则
C语言中,结构体对齐规则是指编译器为了提高数据访问效率,会根据成员变量的类型对结构体中的成员进行内存对齐。通常遵循编译器默认的对齐方式或使用特定的对齐指令来优化结构体布局,以减少内存浪费并提升性能。
|
2月前
|
编译器 C语言
共用体和结构体在 C 语言中的优先级是怎样的
在C语言中,共用体(union)和结构体(struct)的优先级相同,它们都是用户自定义的数据类型,用于组合不同类型的数据。但是,共用体中的所有成员共享同一段内存,而结构体中的成员各自占用独立的内存空间。
|
2月前
|
存储 C语言
C语言:结构体与共用体的区别
C语言中,结构体(struct)和共用体(union)都用于组合不同类型的数据,但使用方式不同。结构体为每个成员分配独立的内存空间,而共用体的所有成员共享同一段内存,节省空间但需谨慎使用。
|
2月前
|
编译器 C语言 C++
C语言结构体
C语言结构体
28 5
|
2月前
|
C语言
C语言结构体链式结构之有头单链表
文章提供了一个C语言实现的有头单链表的完整代码,包括创建链表、插入、删除和打印等基本操作。
31 1
|
2月前
|
C语言
初识C语言6——结构体
初识C语言6——结构体
18 3
|
2月前
|
存储 编译器 C语言
【C语言】探索结构体基础知识:简明概要
【C语言】探索结构体基础知识:简明概要
|
2月前
|
编译器 Linux C语言
C语言 之 结构体超详细总结
C语言 之 结构体超详细总结
21 0
|
2月前
|
存储 编译器 Linux
深入C语言:探索结构体的奥秘
深入C语言:探索结构体的奥秘