变量的存储类别
内存的分区(了解)
知识点[普通局部变量 普通全局变量 静态局部变量 静态全局变量]
1.普通局部变量
定义形式:在{}里面定义的普通变量 就是普通局部变量
void test01()
{//复合语句
int num1 = 10;//普通局部变量
}
作用范围:离他最近的{}之间有效
生命周期:离他最近的{}之间有效,离开{}的局部变量 系统自动回收
储存区域:栈区
注意事项:
1.普通局部变量补初始化,内容不确定
2.普通局部变量 同名 就近原则
#include<stdio.h>
void test01()
{
//局部变量 不初始化 内容不确定
int data = 100;
{
int data = 200;
printf("A = %d\n",data); //200
}
printf("B = %d\n",data);100
}
int main()
{
test01();
return 0;
}
2.普通全局变量
定义形式:定义在函数外边的变量,就是普通全局变量
int data;//普通全局变量 在函数外边定义
void test02()
{
}
作用范围:
a.当前源文件都有效
#include<stdio.h>
extern int data;//声明一下 不要赋值
void test01()
{
printf("test01 = %d\n",data);//100
}
int data = 100;//普通全局变量 在函数外边定义
void test02()
{
printf("test02 = %d\n",data);//100
}
int main(int argc,char *argv[])
{
printf("main = %d\n",data);//100
test01();
test02();
return 0;
}
b.其他源文件使用全局变量时,必须加extern声明
//extern 本质作用:告诉编译器 变量/函数 来自其他源文件 请通过编译
生命周期:整个进程都有效(程序结束的时候 全局变量 才被释放)
存储区域:全局区
注意事项:
a.全局变量不初始化 内容为0.
b.如果全局变量 要在其他源文件中使用 必须在所使用源文件中加extern声明
c.如果全局变量 和 局部变量 同名 在局部{}中优先使用局部变量
3.静态局部变量
定义形式:在{}中定义 前面 必须加static 叫 静态局部变量
void test01()
{
static int num;//静态局部变量
return;
}
作用范围:离他最近的{}之间有效
void test01()
{
{
static int num;//静态局部变量
}
//说明 静态局部变量 只在离他最近的{}有效
printf("%d\n",num);//error C2065: 'num' : undeclared identifier
return;
}
生命周期:整个进程,(程序结束时候 静态局部变量 才被释放)
--------------------案例--------------------
#include<stdio.h>
void fun1()
{
//静态局部变量 只能被初始化一次
static int num = 10;//普通的局部变量
num++;
printf("num = %d\n",num);
return;
}
int main(int argc,char *argv[])
{
fun1();//11
fun1();//12
fun1();//13
fun1();//14
return 0;
}
存储区域:全局区
注意事项:
a.静态局部变量 不初始化 内容为0 (全局区)
b.只能被定义一次
4.静态全局变量
定义形式:在函数外边定义 同时加static 这样的变量 就是 静态全局变量
static int data = 0;静态全局变量
作用范围:当前源文件有效 不能在其他源文件中使用
生命周期:整个进程 程序结束 静态全局变量才被释放
存储区域:全局区
注意事项:
1.静态全局变量 不初始化 内容为0
2.静态全局变量 只在当前源文件 有效
全局函数(普通函数)和静态函数(局部函数)
1.全局函数:普通函数
特点:
- 可以在其他源文件使用
- 其他原文 可以使用 全局函数 必须加extern 声明
2.静态函数(局部函数)
static void my_static_fun(void)
特点:
只能在当前源文件使用 不能在其他源文件使用
注意:如果想在其他源文件调用静态函数,需要将静态函数封装在全局函数中.同时全局函数 和 静态函数 必须是同一个源文件.
案例:
7*18*20 = 2520
|