关键字 static
静态的
修饰变量和函数
1.修饰局部变量
2.修饰全局变量
3.修饰函数
void test(){
//void的意思就是不需要这个函数有任何返回值,只需要执行就行,主要看这个函数的值需不需要调用
int a=1;
a++;
printf("%d",a);
}
int i=0;
while(i<10){
test();
i++;
printf("%d",a);
}
上述函数输出了10个2
此时在int a=1;前面加一个static修饰一下a这个变量
static int a=1;
得到了 2 3 4 5 6 7 8 9 10 11
a出了text范围之后没有销毁
static 修饰局部变量的时候,局部变量不销毁。本质上,static改变了变量的存储位置
内存里划分出不同的区块
栈区
存储局部变量 进栈区创建,出栈区销毁 static使一个变量变为了静态区 影响了变量的生命周期
堆区
静态区
随程序的结束而结束
static修饰全局变量
不同的源文件之间使用同一个变量时要声明外部符号 extern
extern int a;
当我们在全局变量定义前加static
static int a=0;
发现在其他文件无法使用了
因为全局变量是拥有外部链接属性的,一个文件要经过编译加链接生成可执行程序,现在加上static,是因为static修饰全局变量时,其外部链接属性就变为了内部链接属性,其他的源文件就无法使用了,但内部可以看见,相当于关闭了他的外部连接属性,外部无法使用,作用域变小了,是一个保护系统。
作用
1.保护作用
2.防止命名冲突
static 修饰函数
int Add(int x,int y);{
return x+y:
)
int main(){
int a=10;
int b=20;
int z=Add(a,b);
printf("%d",z);
}
如果将Add这个函数放在其他的源文件,
extern int Add(int x,int y);
依然可以使用Add,所以说函数也是具有外部连接属性的
这时使用static,可以使Add的外部链接属性消失,也是起到了保护作用,跟全局变量的修饰相似
关键字 register
电脑上的存储设备
寄存器(集成到CPU上)
高速缓存
内存
硬盘
(越靠上,越快,空间越小,造价越大,越靠下面的空间大,访问速度慢,造价低)
CPU承担了计算任务,随着技术进步,计算能力非常快,造价越来越高,所以创造了寄存器,以此类推,这样整个计算器的计算性能就高起来了。在我们写法代码的过程中,也可以创建寄存器,可以建议数据储存到寄存器中更快的使用
register int num=3;
大量频繁使用的变量放进寄存器中,但最终放不放进寄存器中,由编译器决定,由于现在的处理器非常聪明,有些数据即使不声明放入寄存器中,使用的太过频繁,他会自己放进寄存器中。