【C】结构体+自定义类型知识点大全(基础,进阶,简洁,全面)(一)

简介: 【C】结构体+自定义类型知识点大全(基础,进阶,简洁,全面)

结构体部分:(基础章部分)

一.结构体的基础知识

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

类型分类:

内置类型:char,short,int,long,long long(c99),float,double,bool(布尔)

自定义类型:结构体(struct),枚举(enum),联合体(union)

1.结构体的声明

结构体:

Struct:关键字

Tag:结构体标签

Member-list:成员列表

Variable-list:结构体变量

例:

*匿名结构体类型的声明

特点:

  1. 可以把结构体的名字去掉 
  2. 看似相同,编译器会把其当作不同的结构体类型

例:


2.访问结构体成员

有两种访问方式:

  • 结构体变量 . 结构体成员名(传值)
  • 结构体指针 ->结构体成员名(传址)

一:普通场景


二:结构体内嵌套结构体时


三:要修改的成员变量是字符数组时 (strcpy)

应使用strcpy;原因:数组名是首元素地址不可以覆盖

 


3.结构体传参

传参有两种类型:

  • 传值(传结构体变量)    
  • 传址(传结构体指针

PS:传值调用,形参是实参的临时拷贝,开辟还要占据空间。而传址调用仅仅传递地址,节省空间

有两种访问方式:

  • 结构体变量 . 结构体成员名(传值)
  • 结构体指针 ->结构体成员名(传址)

传值场景:

传址场景:

4.结构体的定义与初始化

一:结构体重命名(typedef)

注意点:

  • 实例化时,不用再次写struct  Node c(例:直接Node c)
  • 在重命名之前不可以使用Node

例:


二:结构体的创建(实例化)

结构体声明时可以同时创建多个变量/多个指针

例:

struct Book
{  
   char book_name[20];
   char author[20];
   int price;
   char id[15];
}sb3,sb4,*sb5;
等价于struct Book sb3,sb4;

三:结构体的初始化

结构体的初始化分为两种方式

  • 声明时直接创建
  • 单独创建按顺序创建/不按顺序创建)

例:

struct Book
{  
   char book_name[20];
   char author[20];
   int price;
   char id[15];
}sb3={"C++","超人",20,"MB666"};//声明时直接创建
strcut Book SB3={"C++","超人",20,"MB666"};//单独创建(按顺序创建)
strcut Book SB3={.price=20};//单独创建(不按顺序创建,直接索引)
不能直接修改成员列表中的数组,要用strcpy!!//详情见同一博客,“访问结构体成员”

自定义类型部分:(进阶部分)

一.自定义类型分类

自定义类型:

结构体(struct)

枚举(enum)

联合体(union)



相关文章
|
3月前
|
存储 C语言
【C语言基础】一篇文章搞懂指针的基本使用
本文介绍了指针的概念及其在编程中的应用。指针本质上是内存地址,通过指针变量存储并间接访问内存中的值。定义指针变量的基本格式为 `基类型 *指针变量名`。取地址操作符`&`用于获取变量地址,取值操作符`*`用于获取地址对应的数据。指针的应用场景包括传递变量地址以实现在函数间修改值,以及通过对指针进行偏移来访问数组元素等。此外,还介绍了如何使用`malloc`动态申请堆内存,并需手动释放。
|
6月前
|
C语言
C语言学习记录——枚举(定义、与结构体的区别、优点)
C语言学习记录——枚举(定义、与结构体的区别、优点)
64 3
|
7月前
|
存储 编译器 对象存储
【C++基础(十)】C++泛型编程--模板初阶
【C++基础(十)】C++泛型编程--模板初阶
【C++基础(十)】C++泛型编程--模板初阶
【C】操作符——知识点大全(简洁,全面)(一)
【C】操作符——知识点大全(简洁,全面)
|
C语言
【C语言进阶篇】看完这篇结构体文章,我向数据结构又进了一大步!(结构体进阶详解)(下)
【C语言进阶篇】看完这篇结构体文章,我向数据结构又进了一大步!(结构体进阶详解)(下)
292 0
|
存储 编译器 C语言
【C语言进阶篇】看完这篇结构体文章,我向数据结构又进了一大步!(结构体进阶详解)(上)
【C语言进阶篇】看完这篇结构体文章,我向数据结构又进了一大步!(结构体进阶详解)
121 0
|
编译器 Linux C语言
C语言进阶学习日志:自定义类型 (细中细)(上)
C语言进阶学习日志:自定义类型 (细中细)
84 0
|
C语言
C语言进阶学习日志:自定义类型 (细中细)(下)
C语言进阶学习日志:自定义类型 (细中细)(下)
90 0
【C】结构体+自定义类型知识点大全(基础,进阶,简洁,全面)(二)
【C】结构体+自定义类型知识点大全(基础,进阶,简洁,全面)
|
存储 C语言
【C】数组——知识点大全(简洁,详细)(一)
【C】数组——知识点大全(简洁,详细)