36、static和extern对变量的作用

1、概念
  • 外部变量: 定义的变量能被本文件和其它文件访问,默认情况下,所有的全局变量都是外部变量。因此,不同文件中的外部变量,都代表着同一个变量
  • 内部变量: 定义的变量只能被本文件访问,不能被其它文件访问
2、定义格式
2.1、外部变量

[extern] 数据类型 变量名;

2.2、内部变量

[static] 数据类型 变量名;

3、外部变量案例

######3.1、源代码

03.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
// 声明函数
void func1();
// 声明一个外部变量
extern int a;

int main()
{
a = 10;
extern int b;
b = 10;
func1();
printf("&a=%p,a=%d\n",&a,a);
return 0;
}
04.c
1
2
3
4
5
6
7
8
9
10
#include<stdio.h>

int a;
int b;
void func1()
{
printf("&a=%p,a=%d\n",&a,a);
printf("&b=%p,b=%d\n",&b,b);
a = 20;
}
3.2、运行结果

运行结果

4、内部变量案例
4.1、源代码
03.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
// 声明函数
void func1();
// 声明一个外部变量
static int a;

int main()
{
a = 10;
static int b;
b = 10;
func1();
printf("&a=%p,a=%d\n",&a,a);
return 0;
}
04.c
1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>

int a;
int b;
void func1()
{
printf("&a=%p,a=%d\n",&a,a);
printf("&b=%p,b=%d\n",&b,b);
a = 20;
printf("&a=%p,a=%d\n",&a,a);
}
4.2、运行结果

运行结果