函数
函数的本质:
步骤的封装
函数分为两种:自定义函数(自己进行封装)和系统提供的函数(已经封装好的)
封装函数的目的:减少重复步骤--因为我们把重复的步骤封装后,需要使用时直接调用就好了
函数声明:type function(){}--返回类型+函数名+参数列表+执行语句
返回类型:
特别的,void表示没有返回值--或者说返回值的类型为"无"
函数名:
参考定义变量的原则
参数列表:
数量不限,实际上类型也比较多样--你甚至可以传入数组或者地址
函数之间也可以相互嵌套--也就是互相调用--在极端一点--你甚至可以把函数作为返回值
请注意:
使用形参时,只是复制一份实参,但是修改操作都是在复制来的数值上进行;
但是使用地址时,存在更改原实参的风险
函数调用的本质:地址+参数
ps:函数名单独使用时指的就是函数的地址
内存区域划分
在程序执行时,计算机存在四个区域
堆区:存放手动申请的空间
ps: void*:泛型指针
(1)malloc--需要引入<stdlib.h>文档才可以进行使用
malloc的本质:
void *malloc(
size_t size
);
int* AA(){
int *p=malloc(4);
*p=100;
return p;
}--本质
生命周期:手动申请空间时,堆区初始化;手动释放时消亡
作用域:全局--因为我已经拿到了所需要的地址
特性:暂无
栈区:存放所有的局部变量--在作用域(在这里可以理解为"{}"内)内定义的变量/函数的参数
局部变量:在作用域内定义的变量--函数的形参是其中的一种
生命周期:声明时创建,作用域结束时会进行回收
适用范围:所声明的作用域内
特性:暂无
字符常量区(严格来说,也可以分为字符常量区和代码段):
全局/静态变量区:
(1) 全局变量:定义在程序外部
生命周期:程序运行时诞生,程序执行结束时销毁
使用范围:整个程序
特性:以这种方式定义的变量会被自动初始化为"0";
(2)静态变量:使用static进行修饰的变量
生命周期:程序运行时诞生,程序执行结束时销毁
使用范围:整个程序
特性:
<1>若未对变量进行初始化,则以这种方式定义的变量会被自动初始化为"0";
<2>不可进行数值更改的操作
malloc单纯就是申请空间,至于如何使用--那是后续要考虑的事情
ps:<1>所申请的空间的单位为字节
<2>函数执行完毕后,不会被回收--这样说不太准确--实际上是因为主函数已经拿到了地址
free(local);//手动释放空间--切记请不要二次释放空间