【C语言初阶篇】自定义类型结构体我不允许还有人不会!(上)

简介: 【C语言初阶篇】自定义类型结构体我不允许还有人不会!

📋 前言

  🌈hello! 各位宝子们大家好啊,前面我们学完指针了就正式进入到结构体这一章节了。

  ⛳️结构体使我们自定义类型的一种,应用可以说非常广泛了。今天就给大家大家详细解析一下,结构的内容详解以及各种注意事项!

  📚本期文章收录在 《C语言初阶》,大家有兴趣可以看看呐

  ⛺️ 欢迎铁汁们 ✔️ 点赞 👍 收藏 ⭐留言 📝!

1 . 什么是结构体

  ⛳️ 关于结构体我们可以这样理解,数组是一些相同元素的集合,那么结构体就是不同类型值的的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

  • 所以说结构体是一些值的集合
  • 这些值称为成员变量
  • 每个成员可以是不同类型的变量

1.1 结构的定义

那么结构体该如何定义呢?结构体其实就和 int 整形是一模一样的,结构体也是一个类型。想定义一个结构体变量首先需要先声明这个结构的类型成员是那些!

  • 结构体的声明关键字:struct
  • 下面我们就来看一下结构体是如何声明的吧!

1.2 结构的声明

📚 结构体的语法形式:

struct tag
{
  member - list;
}variable - list;

结构体的关键字struct 后面跟的 tag 是 结构体的标签名,可以自定义。我们也根据实际情况自定义!

  • member - list大括号里面需要的就是我们成员列表了
  • 为什么叫成员列表,因为结构体里面可以一个或多个不同类型的成员
  • variable - list这个是变量列表的意思

可能各位,铁汁还是不明白。我们来看一下实际例子大家就明白了!例如描述一个学生:

  • 学生那就需要 姓名年龄性别学号
  • 而结构体刚好可以满足不同类型的变量

📚 代码演示:

struct Stu
{
  char name[20];//名字
  int age;//年龄
  char sex[5];//性别
  char id[20];//学号
}; //分号不能丢

总结:

  • 结构体定义需要,结构体关键字,结构体标签名。
  • 成员变量的类型和名字
  • 和结构体后面的分号。

2.结构体初始化

2.1 用标签名定义和初始化

结构体类型的声明和定义都回了。那么一个结构体类型我们该怎么创建一个结构体的变量呢?答案是使用结构体的标签名用来定义结构体变量,或者在创建结构体的时候直接在后面跟上结构体变量

  • 在声明结构体是创建的结构体变量是 全局变量
  • 在大括号里面创建的结构体是 局部变量

📚 代码演示:

struct Point
{
  int x;
  int y;
}p1; //声明类型的同时定义变量p1
//全局变量
int main()
{
  struct Point p2;//直接使用标签名定义
  //局部变量
  return 0;
}

而初始化的话也非常简单和数组是差不多的每个成员赋值用大括号扩起来,单引号隔开就好了!

  • 大括号括起来,后面加引号
  • 每个成员逗号隔开

📚 代码演示:

struct Point
{
  int x;
  int y;
}p1 = { 2, 1 };//创建时直接赋值
int main()
{
  struct Point p2 = {12,13};//直接使用标签名定义
              //然后进行赋值     
  return 0;
}

2.2 typedef 的结构体定义

这时候大家就会发现诶呀!结构体的变量的定义也太麻烦了吧!还要写结构体的关键字和标签名一点也不简便!那么有没有简便的方法呢!这时候就需要用到 typedef 重命名关键字来重新定义结构体名称了!

  • 使用 typedef 重命名结构体后,结构体大括号后面跟的第一个变量就是结构体重命名后的类型名!
  • 而我们想要在定义的话只需要写出重命名之火后的类型名就好了非常便捷!

📚 代码演示:

#include <stdio.h>
typedef struct Point
{
  int x;
  int y;
}Pt;//重定义后的类型名
int main()
{
  Pt p2 = { 12,13 };//typedef重定义类型名定义
  //结构体变量然后进行赋值    
  return 0;
}

📑 代码结果:

2.3 typedef 的结构体初始化

typedef 的结构体初始化和标签名初始化一模一样但是,不能和标签名一样在结构体类型的最后一行直接创建结构体变量和初始化了。

  • typedef 重命名了,在声明后面就不能再创建我们的结构体变量了
  • 因为typedef 的定义结构体后面默认跟的是重命名的类型名。

📚 代码演示:

#include <stdio.h>
typedef struct Stu
{
  char name[20];//姓名
  int age;//年龄
  char sex[5];//性别
  char id[20];//学号
}Stu;
//全局变量
Stu p1 = { .id = "20202356",.age = 18, .name = "lisi",.sex = "nan" };
int main()
{
  printf("姓名\t年龄\t性别\t学号\n");
  //局部变量
  Stu p2 = { .id = "202329",.age = 20, .name = "zhangsan",.sex = "nan" };
  printf("%-10s\t %d\t %s\t %s\n", p1.name, p1.age, p1.sex, p1.id);
  printf("%-10s\t %d\t %s\t %s\t", p2.name, p2.age, p2.sex, p2.id);
  return 0;
}

📑 代码结果:


目录
相关文章
|
20天前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
105 14
|
24天前
|
存储 编译器 C语言
【C语言】结构体详解 -《探索C语言的 “小宇宙” 》
结构体通过`struct`关键字定义。定义结构体时,需要指定结构体的名称以及结构体内部的成员变量。
110 10
|
29天前
|
存储 数据建模 程序员
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
|
1月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
122 13
|
1月前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
62 11
|
1月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
57 4
|
存储 C语言
【C语言】 条件操作符 -- 逗号表达式 -- []下标访问操作符,()函数调用操作符 -- 常见关键字 -- 指针 -- 结构体
【C语言】 条件操作符 -- 逗号表达式 -- []下标访问操作符,()函数调用操作符 -- 常见关键字 -- 指针 -- 结构体
【C语言】——define和指针与结构体初识
【C语言】——define和指针与结构体初识
|
存储 C语言
C语言初识-关键字-操作符-指针-结构体
C语言初识-关键字-操作符-指针-结构体
66 0
【C语言】指针,结构体,链表
【C语言】指针,结构体,链表