您的位置:首页 > 运维架构 > Linux

苏嵌嵌入式Linux实训 第 6天

2020-07-14 06:33 204 查看
本人进度计划以及任务 学习c语言

本日任务完成情况

(详细说明本日任务是否按 计划完成,开发的代码量)

学习了

1.函数

  • 三要素:函数名、形参、返回值
  • 函数名:命名>自注释性 动词+名词  add_user  del_user
  • 函数参数:实参是什么类型,形参就定义成什么类型;
  • <传数组名>:

传一维数组名,用元素的指针
传二维数组名,用一维数组指针
传三维数组名,用二维数组指针
传指针数组名,用指针的指针

  • 传地址和传值:什么时候传地址,什么时候传值?
            当只使用不修改实参变量的值,传实参变量名;func(实参变量名)
             当使用及修改实参变量的值,传实参变量的地址;func(&实参变量名)
  • 函数返回值:

                return  ;

                exit

2.内存管理

  • 内存的分配
  • 常见内存错误:内存泄露
  • malloc;free的使用
  • 内存池:(将使用多次malloc操作改变成只使用一次)
  • 在多次使用内存时,malloc/free操作消耗非常大

3.关键字

  • register:

       请求让编译器将变量直接放入寄存器里面,以提高读取速度;修饰的变量不可被取地址

  • static:
  1. 修饰函数的局部变量;有默认值0,只执行一次,运行一开始就开辟了内存,内存放在全局
  2. 修饰全局函数和全局变量;只能在本源文件使用

 

  • extern:外部声明
  • const:修饰变量成为一个只读变量(需初始化)
  • typedef:给数据类型定义一个别名

4.复合数据类型

 

 

作业1:为什么使用typedef?

 

第一,是程序参数化,以提高程序可移植性。如果typedef说明的数据类型依赖于机器,那么当程序一直到其他机器上时,只需改变typedef的类型定义。一个常见的情况是用typedef给不同的整型量说明类型,随后可谓每个宿主机器选择适当的short,int和long……

第二,是源代码更容易阅读

 

作业2:什么时候使用static?

 

static 用来说明静态变量。如果是在函数外面定义的,那么其效果和全局变量类似,但是,static定义的变量只能在当前c程序文件中使用,在另一个c代码里面,即使使用extern关键词也不能访问这个static变量。如果是在函数内部定义的,那么这个变量只初始化一次,即使再次调用这个函数,这个static变量也不会再次被初始化,于是,这个变量的取值就会一直保存着,也就是说,当你再次调用这个函数的时候,里面用到这个static变量时,就会发现,还是它还是上一次函数调用时的结果。

 

作业3:free如何知道要释放内存空间的长度?

 

其实真正的内存管理如申请/释放等,并不是由malloc或者free等库函数来负责的,而是交由操作系统去完成,它们只是维护一个空闲的链表式的内存块,理解这一点是问题的关键。例如:要申请sizeof(int)*100大小的内存空间,虽然返回的是内存大小是400,但实际上,操作系统分配时候,会多出一块用于存储内存大小的类似链表head头节点的东东,这个节点存储的是空间的首地址及分配内存的大小。当用户调用free函数的时候,其实它也不知道要释放内存的大小,它只需改变head头结点里的内存的大小就可以了,具体内存空间的释放由操作系统去完成。

 

本日开发中出现的问题汇总
本日未解决问题无
其它



 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: