【一】、变量的存储类型
1. 变量的定义
变量是对内存空间的抽象
2. 变量的生命周期
变量在内存中的存储时间。既变量从申请内存到释放内存的一段时间。
3. 变量的作用域
变量的作用范围,既哪部分的程序可以使用该变量。
4. 链接点
外部链接
可以在一个多文件程序中的任何地方使用(auto 修饰的全局变量)
内部链接
在一个文件的任何地方使用(static 修饰的变量只可以在本文件内使用)
空链接
代码块作用域或者函数原型作用域(只能在函数中使用)
5. auto、static、extern、register
static:
1. 改变变量的作用域
2. 延长变量的生命周期
3. 只初始化一次
register:
register修饰的变量,希望分配一个寄存器来存放变量的值,但是不一定能分配到。如果分配不到就放在内存里。
extern:调用外部文件的
4G虚拟内存空间划分:
3G-4G:内核空间
0G-3G:用户空间
栈区(局部变量)
堆区(用户手动分配的空间)
.data段(初始化的全局变量和初始化的静态局部变量)
数据区 --->>> .bss段(未初始化的全局变量和未初始化的静态局部变量)
常量区(只读)
代码段(只读
【二】、动态内存分配
/****************************
*功能:在堆中分配空间
*参数:申请的堆空间的大小,单位是位
*返回值:
* 成功:返回一个可用的地址
* 失败:返回NULL
****************************/
void *malloc(size_t size);
#include
/*************************************
*功能:设置指针指向的内存空间
*参数:
* s:要设置的内存空间的首地址
* c:要写入内存中的值
* n: 写入多少个字节
*************************************/
void *memset(void *s, int c, size_t n);
/*************************************
*功能:释放堆空间
*参数:指向要释放的堆空间的首地址
*************************************/
void free(void *ptr);
注意:释放完堆空间以后,将指针赋值为NULL。
malloc函数的一般传参形式:
int *p = (int *)malloc(10*sizeof(int));
【三】、make工程管理工具
1. 简介
工程管理器,顾名思义,是指管理较多的文件
特点(优势):
构根据文件时间戳自动发现更新过的文件而减少编译的工作量
命名方式:
GNUmakefile、 makefile、 Makefile
Makefile的三要素:
目标
依赖
规则
Makefile的格式:
目标:依赖
2. 自定义变量的四种赋值方式
1.递归展开方式VAR=var
特点:向后引用
2.简单方式 VAR:=var
3.?=定义变量
VAR ?= var
如果VAR变量在之前定义过,就使用之前的值,否则使用现在定义的值
4.+=定义变量
在原来变量的基础上增加值
VAR := add.o
VAR += sub.o
3. 预定义变量
4. 自动变量
依赖文件:
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$^ 所有不重复的目标依赖文件,以空格分开
$< 第一个依赖文件的名称
$? 所有时间戳比目标文件晚的依赖文件,并以空格分开
目标文件:
$@ 目标文件的完整名称
$* 不包含扩展名的目标文件名称
5.
-C dir读入指定目录下的Makefile
-f file读入当前目录下的file文件作为Makefile
-i 忽略所有的命令执行错误