当前位置: 首页 > news >正文

结构体的简单介绍(C语言)

本文起到数据结构学习前的C语言知识复习补充作用

结构体:

1. 结构体的定义与作用

核心概念:结构体(struct)是C语言中一种自定义数据类型,用于将多个不同类型的变量组合成一个整体。
解决的问题:当需要同时管理一组逻辑相关但类型不同的数据时(如学生信息、商品属性),结构体可以简化数据管理。

示例场景
示例一:存储一个学生的信息:姓名(字符串)、年龄(整数)、成绩(浮点数);
示例二:存储一个二维平面的点 例如a:( x , y )。


2. 结构体的声明

语法

//对应示例一:
struct 结构体名
 {
    数据类型 成员1;
    数据类型 成员2;
    // ...
 };
//对应示例二:
struct (结构体名)Point 
{
    数值类型 x;  // 横坐标
    数值类型 y;  // 纵坐标
}

代码示例

//对应示例一:
// 声明一个结构体类型 Student
struct Student 
{
    char name[20];
    int age;
    float score;
 };
//对应示例二:
struct Point 
{
    float x;  // x坐标
    float y;  // y坐标
};

3. 结构体变量的定义与初始化
(1) 直接定义变量
struct Student
 {
    char name[20];
    int age;
 } stu1, stu2; // 直接定义两个结构体变量 stu1 和 stu2
(2) 先声明类型,再定义变量
struct Student stu3; // 通过类型名定义变量
(3) 初始化赋值
struct Student stu4 = {"张三", 18, 90.5}; // 按顺序初始化成员

关于结构体括号后是否加名字的问题(typedef

1. 未使用typedef的结构体

代码示例
// 定义结构体类型
struct Point 
{
    double x;
    double y;
};

// 声明结构体变量时必须带"struct"关键字
struct Point a = {3.0, 4.0};
缺点
  • 每次声明变量时都需要写struct Point,冗余且繁琐。

2. 使用typedef后的结构体

代码示例
// 通过typedef为结构体定义别名"Point"
typedef struct 
{
    double x;
    double y;
} Point;

// 声明变量时直接使用别名
Point a = {3.0, 4.0};
优点
  • 简化变量声明,省略struct关键字。
  • 提升代码可读性,更接近自然语言(如Point直接表示点的类型)。

3. typedef的两种常见写法

写法1:匿名结构体 + typedef
typedef struct 
{  
// 结构体本身没有名字(匿名)
    double x;
    double y;
} Point;  
// 别名是Point
写法2:有名字的结构体 + typedef
typedef struct _Point 
{  
// 结构体本身有名字"_Point"
    double x;
    double y;
} Point;  
// 别名是Point
两种写法的区别
  • 匿名结构体:适用于不需要在结构体内部引用自身的情况(如普通坐标点)。
  • 有名字的结构体:适用于需要自引用的场景(如链表节点)。

4. 自引用场景示例(链表节点)

必须使用有名字的结构体
typedef struct Node 
{  
// 结构体名为Node
    int data;
    struct Node* next;  
    // 内部需要引用自身类型
} Node;  
// 别名为Node

// 使用示例
Node head;
head.data = 1;
head.next = NULL;
错误写法(匿名结构体)
typedef struct 
{  // 匿名结构体
    int data;
    struct Node* next;  // 错误!此时"Node"还未定义
} Node;

5. 伪代码对比

未用typedef
定义结构体 Point {
    x: 数值类型
    y: 数值类型
}

声明变量: struct Point a = {x:3, y:4}
使用typedef
定义类型 Point 为结构体 {
    x: 数值类型
    y: 数值类型
}

声明变量: Point a = {x:3, y:4}

6. 总结

  • typedef的作用:为复杂类型(如结构体)定义简洁的别名。
  • 适用场景
    • 简化代码,减少struct重复书写。
    • 定义自引用结构体(如链表、树节点)。
    • 提高代码可移植性(例如统一修改类型名称)。
  • 注意事项:自引用时必须使用有名字的结构体定义。

相关文章:

  • 超精密工件小孔几何尺寸测量:自动化解决方案
  • 使用 Python 爬取微店关键词搜索接口(micro.item_search)的完整指南
  • 农业建设项目管理系统评测:8款推荐工具优缺点分析
  • iWebOffice2015 中间件如何在Chrome107及之后的高版本中加载
  • 车载以太网测试-11【网络层-ICMP协议】
  • Java中char取值范围
  • [c语言日寄]字符串进阶:KMP算法
  • ZVA-Z90,罗德与施瓦茨毫米波变换器
  • Pycharm 社区版安装教程
  • 详解数据库范式
  • 【RTSP】客户端(三) 音频相关
  • Markdown Poster – 免费Markdown转图片工具|优雅图文海报制作与社交媒体分享
  • KiB、MiB、KB与MB的区别
  • 各省水资源平台 水资源遥测终端机都用什么协议
  • 海马下载 1.0.2 | 纯净无广告,极简设计,不限速下载工具
  • jmeter分布式原理及实例
  • Mybaties批量操作
  • 【 Manus平替开源项目】
  • pjsip dtmf发送和接收(pjsua)
  • MySQL | MySQL表的增删改查(CRUD)
  • 搜狐一季度营收1.36亿美元,净亏损同比收窄超两成
  • 探月工程鹊桥二号中继星取得阶段性进展
  • 媒体报道一民企投资400万运营出租车4年未获批,广西隆林县回应
  • 假冒政府机构账号卖假货?“假官号”为何屡禁不绝?媒体调查
  • 香港今年新股集资额已超600亿港元,暂居全球首位
  • 蒲慕明院士:未来数十年不是AI取代人,而是会用AI的人取代不会用的