结构体与联合体:C语言中的高级数据结构介绍
发布时间: 2024-03-01 08:09:51 阅读量: 41 订阅数: 44
# 1. C语言基础回顾
## 1.1 C语言基本数据类型复习
在C语言中,基本数据类型包括整型、浮点型、字符型等。其中,整型可以分为`int`、`short`、`long`等类型,浮点型可以分为`float`、`double`等类型,字符型为`char`类型。C语言中还可以使用`typedef`来创建自定义的数据类型。
**示例代码:**
```c
#include <stdio.h>
typedef struct {
int year;
int month;
int day;
} Date;
int main() {
int age = 25;
float weight = 65.5;
char gender = 'M';
Date today = {2022, 9, 20};
printf("年龄: %d\n", age);
printf("体重: %f\n", weight);
printf("性别: %c\n", gender);
printf("今天的日期: %d 年 %d 月 %d 日\n", today.year, today.month, today.day);
return 0;
}
```
**代码说明:**
- 使用`typedef`定义了一个名为`Date`的结构体,包含年、月、日三个成员。
- 在`main`函数中声明了几个变量,并使用`printf`输出它们的值。
**代码执行结果:**
```
年龄: 25
体重: 65.500000
性别: M
今天的日期: 2022 年 9 月 20 日
```
## 1.2 C语言中的内存分配和变量作用域
C语言中的变量可以分为局部变量和全局变量。局部变量在函数内部声明,只在函数内部有效,而全局变量在函数外部声明,可以被程序中的所有函数访问。
此外,C语言中还有内存的静态分配和动态分配。静态分配使用栈内存,动态分配使用堆内存。
## 1.3 C语言中的指针概念及应用
指针是C语言中非常重要的概念,它可以用来指向变量的地址,对变量进行间接访问。指针可以指向不同类型的数据,并且可以进行指针运算。
**示例代码:**
```c
#include <stdio.h>
int main() {
int score = 90;
int *ptr = &score;
printf("分数的地址:%p\n", &score);
printf("指针指向的地址:%p\n", ptr);
printf("指针指向的值:%d\n", *ptr);
return 0;
}
```
**代码说明:**
- 声明了一个`score`变量,然后定义了一个指针`ptr`,指向`score`变量的地址。
- 使用`printf`输出了`score`变量的地址,`ptr`指针指向的地址以及指针指向的值。
**代码执行结果:**
```
分数的地址:0x7ffee8afebd4
指针指向的地址:0x7ffee8afebd4
指针指向的值:90
```
以上是C语言基础回顾的内容,接下来将更深入地介绍C语言中的结构体及其高级应用。
# 2. 结构体的基本概念与定义
结构体(Struct)是C语言中一种复合数据类型,用于将不同类型的数据组合在一起。通过结构体,我们可以创建自定义的数据类型,以便更好地组织和管理数据。下面将介绍结构体的基本概念与定义。
### 2.1 什么是结构体
结构体是由不同类型的变量组成的集合体,在内存中是连续分配的。每个成员变量都可以有不同的数据类型,这使得结构体非常灵活,能够表示更复杂的数据结构。
### 2.2 结构体的定义及初始化
在C语言中,结构体的定义通常包括结构体模板的创建和变量的声明两部分。下面是一个示例:
```c
#include <stdio.h>
// 定义结构体模板
struct Student {
int id;
char name[20];
float score;
};
int main() {
// 声明并初始化结构体变量
struct Student stu = {101, "Alice", 95.5};
// 访问结构体成员并输出
printf("学生信息:\n");
printf("学号:%d\n", stu.id);
printf("姓名:%s\n", stu.name);
printf("成绩:%.1f\n", stu.score);
return 0;
}
```
在上面的例子中,我们定义了一个名为`Student`的结构体,包含了学生的学号、姓名和成绩三个成员变量。在`main()`函数中,我们声明并初始化了一个`stu`结构体变量,并打印出了学生的信息。
### 2.3 结构体的成员和访问
结构体的成员可以通过`.`操作符来访问,例如`stu.id`、`stu.name`、`stu.score`。这样我们可以方便地获取和修改结构体中的不同数据成员。
通过结构体的定义和使用,我们可以更加灵活和高效地处理复杂数据结构,在实际的编程中结构体扮演着非常重要的角色。
# 3. 结构体的高级应用
结构体在C语言中作为一种复合数据类型,不仅可以包含基本数据类型的成员,还可以包含其他结构体或者指向结构体的指针。在本章中,我们将深入探讨结构体的高级应用,包括结构体嵌套与指针使用、结构体数组与结构体指针数组,以及结构体作为函数参数与返回值的应用场景。
#### 3.1 结构体嵌套与指针使用
结构体可以嵌套其他结构体,形成复杂的数据结构,也可以通过指针访问结构体成员,灵活地操作数据。下面是一个示例,演示了结构体嵌套与指针使用的场景。
```c
#include <stdio.h>
// 定义一个简单的矩形结构体
```
0
0