C语言 函数,内存,关键字,复合数据类型

作业

作业1:free(void *ptr)如何知道释放多少空间?

调用malloc开辟空间的同时,malloc会返回一个指针p,在指针p的后面(地址高于指针p的方向)为新开辟的空间,而在指针p的前边(地址低于指针p的方向)12个字节处,会有4个字节记录开辟空间的大小。当free的时候就去找那个数值,释放掉数值大小的堆空间。

作业2 :static在什么情况下使用?

何时定义静态变量:
1.当对象中出现共享数据时,该数据被静态所修饰。对象中的特有数据要定义成非静态存在于堆内存中。
2.当一个变量的本次操作结果值需要作为下一次操作的初始值时。
何时定义静态函数: 当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。

作业3 :为什么要使用typedef给类型重命名?

就是为了让在不同使用环境下让数据类型变得有“具体含义”。linux内核中,很多很复杂的“结构”,例如内存结构描述符,进程结构描述符,但它们也会有类似上面那种情况,需要用在不同的背景下;因此,经常使用typedef重命名。

课堂笔记

  • 函数三要素:函数名,形参,返回值
  1. 函数名:命名 要具有自注释性 如: 动词+名词 add_user
  2. 函数的参数:实参是什么类型,形参就要定义成什么类型;
    <传数组名>:传一位数组名,用元素指针。二维用一维数组指针。三维,用二维数组指针。传指针数组名,用指针的指针。传地址和传值:传变量名不改变原参数值,传地址可以修改。
  3. 函数编码规范
    检查函数所有参数输入的有效性。
    对所调用函数的错误返回码要仔细、全面地处理。
  • 内存管理
    内存是稀缺资源。
  1. 数据存放位置是 Linux的虚拟地址空间
  2. 栈空间:存放局部变量,函数形参
  3. 堆:malloc/free(开销很大) ralloc calloc 是系统管理的
  4. 常见的内存错误:内存泄漏,内存碎片,内存空洞
  5. 内存池:将使用多次malloc操作改成只使用一次
  • 关键字

  • register 寄存器变量 作用:尽可能的将数据保存到CPU的寄存器中,提高程序执行效率:省去了从内存抓取数据的时间。不能修饰全局变量和函数,只能修饰局部变量 修饰常量后不能取地址,因为取地址是去内存,register是在寄存器。什么时候用:频繁使用某变量时。

  • static 修饰局部变量 作用:改变值后还存在 延长局部变量的生命周期,全部程序结束后才释放。局部变量只执行一次。
    修饰全局变量或函数(静态全局变量) 那么别的文件就不能访问

  • extern 外部声明 告诉编译器这个函数或者变量是在其他文件定义的

  • const 修饰一个变量,该变量成为一个只读变量(修饰的是变量名的权限,告诉编译器不能用变量名修改他的内存空间:可通过指针)。值可以被改变,用指针。 距离谁近就修饰谁,谁就不能被修改。 修饰形参可以保护实参。

  • typedef 给类型重命名t ypedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名。typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。

  • 复合数据类型

  • 结构体struct 定义和使用方法 sizeof是4个4个的分配,不够四个按照4个

  • 枚举enum 从第一个开始表示的值累加。当项目中需要多个整数宏时使用。

  • 共用体union 共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

项目开发日报表

项目名称【苏嵌实训-嵌入式 linux C 第 5天】
今日进度 以及任务C语言 函数,内存,关键字,复合数据类型
本日任务完成情况掌握了内存管理、分配以及一些关键字和复合数据类型的定义和使用方法
本日开发中出现的问题汇总编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,思路是要将整个句子逆序后,再将每个单词逆序
本日未解决问题
本日开发收获代码越来越规范化,对数组和函数的使用方法更加熟练
其他
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值