1、变量总结
内存
栈:
比较小,大概1M,
优点是你不用管它的回收,系统会自动回收;
堆:
优点是大,
特点是需要你自己释放,也正因为你可以不释放,所以其生命周期是非常长的,由使用者决定。
static:静态
值能改变,主要修饰变量和函数,用于改变内存区域、默认值、生命周期和链接属性;
注意和const区分开;
局部变量:在函数内部定义的变量;
全局变量:在函数外部定义的变量,少用,不安全;
普通全局变量:
生命周期:程序运行开始创建,程序结束退出才销毁;可理解为其生命周期与整个程序是等价的;
静态全局变量:
生命周期:程序运行开始创建,程序结束退出才销毁;
默认值:静态(动态)全局变量都为0
示例代码:
int g_a = 20;
int g_b;
static int g_sa;
int main()
{
printf("%d,%d,%d\n",g_a,g_b,g_sa);
return 0;
}
演示结果:
链接属性
其他文件定义的变量g_x:
相关例题:在main执行之前能不能执行其他函数,在main执行之后能不能执行其他函数?
能;
演示代码:
class A
{
public:
A()
{
printf("lol\n");
}
~A()
{
printf("bye\n");
}
};
class A aa;
int main()
{
printf("进入main\n");
int a=10;
printf("退出main\n");
return 0;
}
结果:
普通局部变量和静态局部变量
生命周期:
普通局部变量生命周期:
进入函数创建,函数退出销毁;
静态局部变量生命周期:
进入函数创建,程序退出才销毁;
静态局部变量,函数结束不销毁;
默认值:
普通局部变量:在栈里面,为随机值;
静态局部变量:在静态变量区,值为0;
连接属性
无
作用域:
函数内部
生命周期代码示例:
void Fun()
{
int a = 0;
a++;
printf("%d\n",a);
}
void Fun1()//静态局部变量,函数结束不销毁
{
static int a = 0;
a++;
printf("%d\n",a);
}
int main()
{
for(int i=0;i<5;i++)
{
Fun();
}
printf("---------------\n");
for(int i=0;i<5;i++)
{
Fun1();
}
return 0;
}
运行结果:
动态内存:
malloc、calloc、realloc、free
生命周期:
调用创建函数创建,调用释放函数销毁;
…
函数(普通函数和静态函数)
普通函数
静态函数:C中static主要用于修饰函数