嵌入式每日学习心得2017.07.18

C语言定义的五大内存空间
1.栈区 (stack):(局部变量,形参)
FILO (先入后出),函数的形参和局部变量,存放在这个区。由编译器自动分配,自动释放。


2.堆区(heap):(申请空间)
这个区,由程序员申请后使用,使用完了,需要手动释放。否则,会造成内存泄漏。
一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表


(申请空间的函数有:malloc --- free ;  new --- delete )

3.全局区(静态区)(static):(全局变量和静态变量)
全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在
相邻的另一块区域。程序结束后由系统释放。

4.文字常量区:(存放常量)
常量字符串就是放在这里的,直到程序结束后由系统释放。


char a='9';
char a[]="zmx";
char *a[]={""};


12=92;


5.代码区:
存放函数体的二进制代码


相关函数:(在指针部分,进行详细讲解)
void *malloc(size_t size);
void free(void *p);


变量的作用域和生存期


从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量。从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分
为静态存储方式和动态存储方式。


1.作用域(Scope):起作用的代码范围


根据作用域不同,变量分为局部变量和全局变量


只有在变量的作用域范围内才能访问变量


不同作用域的局部变量可以同名,不冲突


(1)局部变量:
(2)全局变量:
用static关键字定义的全局变量称为静态全局变量。
用extern关键字定义的全局变量称为外部变量


关于局部变量的作用域还要说明以下几点:


1)  主函数中定义的局部变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。
因为主函数也是一个函数,它与其它函数是平行关系。这一点是与其它语言不同的,应予以注意。


2)  形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。


3)  允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。


4)  在复合语句中也可定义变量,其作用域只在复合语句范围内。


5)如果同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。


    从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。


用户存储空间可以分为三个部分:


1)       程序区;
2)       静态存储区;
3)       动态存储区;


对静态局部变量的说明:


1)  静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属
于动态存储类别,占动态存储空间,函数调用结束后立即释放。


2)  静态局部变量在编译时赋初值,即只赋初值一次;而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当
于执行一次赋值语句。


3)  如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而
对自动变量来说,如果不赋初值则它的值是一个不确定的值。




 register变量(寄存器变量)


为了提高效率,C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。


说明:


1)   只有局部自动变量和形式参数可以作为寄存器变量;
2)   一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;
3)   局部静态变量不能定义为寄存器变量。


自定义函数


函数的定义
函数的声明
函数的调用


在调用一个函数时,程序执行流程会跳转到该函数内部去执行,并且会将实参的值传递给形参变量(值传递),即用实参初始化形参变量,当该函
数执行结束返回后,程序执行流程会回到函数调用处,继续往下执行


虚实结合:在调用函数时,形参变量才被定义(创建,分配存储空间),并接收实参传递过来的值(即被实参初始化),在函数返回后,形参变量
将被销毁(释放其占用的内存空间),即不复存在


函数可以嵌套调用,但不能嵌套定义


主函数和普通函数的区别:
1.主函数是由操作系统亲自调用,而普通函数是被主函数直接或间接调用
2.主函数返回会导致进程结束,而普通函数返回没有这个影响力


递归函数:自己调用自己的函数


编写递归函数要把握两点:
1.递推关系
2.递归结束条件


包含头文件时,如果使用双引号,那么编译器会优先去当前工程目录下搜索;如果使用尖括号,那么编译器则优先去系统头文件目录
(比如/usr/include等)下搜索


编译:Compile
编译器:Compiler
链接:Link
链接器:Linker


将工程目录下的每个源文件都编译(通过编译器)成对应的目标文件(Linux平台为.o,是二进制文件,但无法执行),然后将所有目标文
件和库文件链接在一起(通过链接器)构成最终的可执行文件


注意:每个源文件都是单独编译的


shell编程基础
    shell脚本,是包含若干个Linux命令的文件,后缀名是.sh。可以使用vi file.sh,创建 file.sh 文件。


    执行shell程序文件有三种方法:
(1)sh shell_file
(2)source shell_file
(3)./shell_file
    在编写shell时,第一行一般要指明系统需要哪种shell,并解释shell程序。如:
#!/bin/bash  (我们学这种shell)
#!/bin/csh
#!/bin/tcsh


Bash shell 结构


(1)shbang 行:
是脚本的第一行,由#!和shell的完整路径组成。它通知内核使用哪种shell解释脚本中的行。


(2)注释:
由# 后跟描述性的说明组成,位置任意。


(3)通配符:
(1) *  : 匹配任意长度的字符串   rm *.c


(2) ? : 匹配一个长度的字符串   vi 1_struc?.cpp 


(3)[...] :匹配指定的字符        rm [12345].c


(4)[.-.] :匹配一个范围的字符串  rm [1-5].c


(4) 显示输出:
echo 命令,用于向屏幕显示输出


(5)局部变量(declare函数)
(6)全局变量(环境变量)(export命令)
(7)提取变量值  ($)
(8)读取用户输入
(9)参数
(a)数组
(b)命令替换
(c)算数运算
(d)运算符
(e)条件语句;循环语句;
(f)函数


shell中的变量
    用户自定义变量在Linux系统支持的shell中,都可以用赋值符号“=”给变量赋值,所赋的值要用引号括起来。如果需要使用这个变
量,则在变量前面加一个“$”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值