C语言 如何定义和使用结构体?

如何定义和使用结构体?

在C语言中,定义和使用结构体通常涉及以下几个步骤:

1. 定义结构体

首先,你需要定义一个结构体类型。这通常使用 struct 关键字来完成。结构体的定义可以放在函数的外部或内部,但通常推荐放在所有函数之外,以便在多个函数中都能访问它。

c复制代码

|---|------------------|
| | struct 结构体名 { |
| | 数据类型 成员名1; |
| | 数据类型 成员名2; |
| | // ... |
| | 数据类型 成员名N; |
| | }; |

例如,定义一个表示学生的结构体:

c复制代码

|---|---------------------|
| | struct Student { |
| | char name[50]; |
| | int age; |
| | int id; |
| | float score; |
| | }; |

2. 创建结构体变量

定义了结构体类型之后,你可以创建该类型的变量。创建结构体变量有多种方式:

2.1 直接初始化

c复制代码

|---|------------------------------------------------------|
| | struct Student student1 = {"张三", 20, 12345, 90.5}; |

2.2 逐个赋值

c复制代码

|---|-----------------------------|
| | struct Student student2; |
| | student2.name = "李四"; |
| | student2.age = 21; |
| | student2.id = 67890; |
| | student2.score = 85.0; |

注意:对于字符数组(如这里的 name),你需要使用字符串字面量来初始化它,或者使用 strcpy 函数来复制字符串。

3. 访问结构体成员

通过结构体变量和点运算符(.),你可以访问结构体的成员。

c复制代码

|---|-----------------------------------------|
| | printf("学生姓名: %s\n", student1.name); |
| | printf("学生年龄: %d\n", student1.age); |

4. 使用结构体数组

你还可以创建结构体数组,以存储多个结构体变量。

c复制代码

|---|--------------------------------|
| | struct Student students[3]; |
| | |
| | students[0].name = "张三"; |
| | students[0].age = 20; |
| | // ... 初始化其他成员 |
| | |
| | students[1].name = "李四"; |
| | students[1].age = 21; |
| | // ... 初始化其他成员 |
| | |
| | // 以此类推,初始化第三个学生信息 |

5. 结构体作为函数参数

你可以将结构体作为函数的参数,以在函数间传递结构体数据。

c复制代码

|---|------------------------------------------------------|
| | void printStudentInfo(struct Student s) { |
| | printf("姓名: %s\n", s.name); |
| | printf("年龄: %d\n", s.age); |
| | // ... 打印其他信息 |
| | } |
| | |
| | int main() { |
| | struct Student student = {"张三", 20, 12345, 90.5}; |
| | printStudentInfo(student); |
| | return 0; |
| | } |

6. 结构体指针

你还可以使用指向结构体的指针来操作结构体变量。

c复制代码

|---|------------------------------------------|
| | struct Student *pStudent = &student1; |
| | printf("学生姓名: %s\n", pStudent->name); |
| | printf("学生年龄: %d\n", pStudent->age); |

在这里,-> 运算符用于通过指针访问结构体的成员。

注意事项

  • 结构体的成员可以是任何有效的C数据类型,包括其他结构体类型。
  • 结构体的成员默认是公有的(public),这意味着它们可以在定义结构体的作用域之外被访问。在C语言中,没有像C++那样的私有(private)或保护(protected)成员的概念。
  • 结构体的大小可能并非其所有成员大小之和的简单相加,因为编译器可能会为了对齐或性能优化而在结构体成员之间插入填充字节。可以使用 sizeof 运算符来获取结构体实际占用的大小。
相关推荐
天选之女wow8 分钟前
【代码随想录算法训练营——Day60】图论——94.城市间货物运输I、95.城市间货物运输II、96.城市间货物运输III
android·算法·图论
Blossom.11810 分钟前
大模型在边缘计算中的部署挑战与优化策略
人工智能·python·算法·机器学习·边缘计算·pygame·tornado
时间醉酒11 分钟前
数据结构:双向链表-从原理到实战完整指南
c语言·数据结构·算法
京东零售技术15 分钟前
当搜索遇见 AIGC:京东零售的“千人千面”素材生成实践
算法
好学且牛逼的马20 分钟前
【HOT100|1 LeetCode 1. 两数之和】
数据结构·算法·leetcode
奔跑吧邓邓子29 分钟前
【C语言实战(75)】C语言内存探秘:泄漏检测与分析实战
linux·c语言·windows·内存·开发实战·泄露检测
Nebula_g33 分钟前
C语言应用实例:斐波那契数列与其其他应用
c语言·开发语言·后端·学习·算法
不穿格子的程序员39 分钟前
从零开始刷算法-单调栈-每日温度
算法·单调栈
麦烤楽鸡翅40 分钟前
挡住洪水 (牛客)
java·数据结构·c++·python·算法·bfs·牛客
MicroTech202541 分钟前
微算法科技(NASDAQ MLGO)采用动态层次管理和位置聚类技术,修改pBFT算法以提高私有区块链网络运行效率
科技·算法·聚类