02-Linux C语言高级-C结构体&共用体学习笔记

结构体

一般形式

struct 结构体名
{
	数据类型	成员名1;
	数据类型	成员名2}

特点:

  1. 结构体类型是用户自定义的
  2. 由若干不同 的基本数据类型的数据构成
  3. 属于C语言的一种数据类型,与整型、实型相当。定义结构体时不分配空间,只有用它定义变量时才分配空间。

定义结构体变量方法:

  1. 先定义结构体再定义变量
struct worker{
	...
	...
};
struct worker w1,w2;
  1. 定义结构体类型同时定义变量
struct student{
	...
}s1,s2;
  1. 直接定义结构体变量
struct{
	...
}s3,s4;

结构体变量的初始化

//example1
struct 结构体名 变量名 = {初始化列表}//example2
struct 结构体名{
	成员列表
}变量名 = {初始数据列表}

共用体

不同数据类型可以使用共同的存储区域,成员使用共同存储空间。

定义共用体方法和定义结构体方法一样;
共用体占内存大小为共用体内占内存最大的成员的大小
共用体内存的值为最后一次赋值其成员的值

typedef

语法:
typedef <已有数据类型> <新数据类型>

typedef struct old_data_type{
	...
}new_data_type1,*new_data_type2;

内存管理

动态内存

  • 代码区
  • 全局变量与静态变量区
  • 局部变量区即栈区
  • 动态存储区即堆区

静态存储区:通常定义变量,编译器在编译时根据该变量的类型知道所需要内存空间大小,从而系统在适当的时候为之分配确定的存储空间。
栈区:在栈上创建,执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。
:程序运行时才能知道其大小,系统根据运行时的要求进行内存分配。malloc申请,free释放。堆在申请空间时不会自动初始化,所以在malloc时必须对其初始化。

malloc/free注意事项

free(p),实际是指删除了p所指向的目标(变量或对象),释放了它所占的堆空间,而不是删除p本身,释放堆空间后,p编程空悬指针。
同一空间重复释放也是危险的,该空间可能已另被分配。
必须保证不发生内存泄漏,也不发生重复释放堆空间。

野指针

  • 指针变量没有初始化
  • 指针p被free之后,没后置NULL,后续操作误以为p是合法指针
  • 指针操作超越了变量的作用范围。

L2-D4

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值