内存分区
由下到上,地址由小到大,
堆区:由程序员通过malloc函数和free函数申请和释放;
栈区:由编译器自动分配和释放,栈区的内容只在函数范围内存在,当函数运行结束,内容就会被自动销毁;
****存放的内容;
主要是临时创建的局部变量和函数在调用和返回时的入口参数和返回值.
全局区:存放全局变量和静态变量;
常量区:存放代码中的数字和字符等常量;
代码区:存放可执行代码,防止频繁读取硬盘;
变量存储
普通全局变量:,存放在全局区,默认值为0
普通局部变量;存放在栈区,默认值为随机值(脏数据)
静态全局变量:存放在全局区,所以默认值为0;
第一次执行testfun函数后,程序结束了,但是静态变量n并没有释放,第二次执行testfun函数时,静态变量n已经存在,任然在生命周期内,还保留了之前的值,所以n++后值为2,
静态变量的值会在程序运行结束后被释放
静态局部变量: 存放在全局区,所以默认值为0;
作用域为当前文件中,生命周期为程序运行至程序运行结束,跨文件会显示未定义;
头文件
头文件.h中包含的是各种函数或者变量的声明,函数和变量的定义是在相同名字的.c文件完成的.
编译时只需要编译两个.c文件即可
如果不引入头文件,则也可以直接将.h文件中的函数声明引入,如下图.