目录

结构体的简单介绍C语言

结构体的简单介绍(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 重复书写。
    • 定义自引用结构体(如链表、树节点)。
    • 提高代码可移植性(例如统一修改类型名称)。
  • 注意事项 :自引用时必须使用有名字的结构体定义。