局部变量
//局部变量:在函数内部定义的变量
//作用域:函数内部
//生命周期:从变量创建到函数结束
存储在栈区
#include<stdio.h>
//局部变量:在函数内部定义的变量
//作用域:函数内部
//生命周期:从变量创建到函数结束
void main01(){
auto int b = 10;// 局部变量,auto关键字可以省略
int a = 10; //局部变量
}
int sum(int a, int b) {
//这里的形参也是局部变量
return a + b;
}
void main() {
for (int i = 0; i < 5; i++) {
//其中的i也是全局变量,如果后面要用到i需要把i提前
}
}
局部静态变量
//存储在数据区,只会初始化一次,但是可以重复赋值
//作用域:本函数
//生命周期:随着程序的结束而结束
#include<stdio.h>
void fun1() {
//printf("%d\n", a); 跟普通的局部变量一样也是不能再外部打印
}
void main() {
static int a = 10;
printf("%d\n", a);
}
//静态局部变量
//存储在数据区,只会初始化一次,但是可以重复赋值
//作用域:本函数
//生命周期:随着程序的结束而结束
void fun1() {
static int aa = 10; //如果去掉static ,这5次输出的就都是10
aa++;
printf("%d\n", aa);
}
void main() {
for (int i = 0; i < 5; i++) {
fun1();
}
}
//输出的是
//11
//12
//13
//14
//15
全局变量
全局变量:定义在函数外部的变量
作用域:整个项目的所有文件,但是需要声明 extern
声明周期:跟随项目销毁而销毁
存储在数据区
//全局变量:定义在函数外部的变量
//作用域:整个项目的所有文件,但是需要声明 extern
//声明周期:跟随项目销毁而销毁
//存储在数据区
int z = 1000;
void main07() {
printf("%d", z);
}
//整个是一个新的c文件
#include<stdio.h>
extern z;
void main() {
printf("%d", z);
}
不同文件的全局变量不可以重名, 全局变量和局部变量可以重名
int num = 100;
void main() {
printf("这里输出的是全局变量num=%d\n", num);
int num = 200; //这里声明的是局部变量,会随着函数的销毁而销毁
printf("就近原则,这里输出的是局部变量num=%d\n", num);
}
静态全局变量
//静态全局变量
//作用域:本文件
//声明周期: 从变量创建到程序销毁
//存储在数据区
//静态全局变量
//作用域:本文件
//声明周期: 从变量创建到程序销毁
//存储在数据区
static int a=10;
void fun01() {
printf("%d\n", a);
}
void main() {
printf("%d\n", a);
fun01();
}
总结