一、auto
1、一般在代码块中定义的变量中,即局部变量,默认都是auto修饰的(局部变量、自动变量、临时变量都统称为局部变量)
auto int b = 0;
int main()
{
auto int a = 0;
printf("%d", a);
return 0;
}
修饰全局变量会报错
2、只使用auto修饰变量,变量的类型默认为整型
int main()
{
float a = 1.2f, b = 1.3f, c;
c = a + b;
printf("%f\n", c );
float a1 = 1.2f, b1 = 1.3f;
auto c1 = 0;
c1 = a1 + b1;
printf("%d", c1);
}
输出结果
二、register
register用来修饰变量,尽可能地将变量放在CPU寄存区中,从而来达到提高效率的目的
1、修饰局部变量(修饰全局会导致CPU寄存器长时间的占用)
register int j = 0;
int main()
{
register float a = 1.2f, b = 1.3f, c;
c = a + b;
printf("%f\n", c );
}
不会被写入的(写入的就需要写回内存,后续还要读取检测的话,register的意义在哪)
高频的被读取(提高效率所在)
如果要使用,请不要大量的使用,因为寄存器的数量有限
2、register修饰的变量不能取地址(因为已经放在寄存器当中了,地址是内存相关的概念)
int main()
{
register int a = 1;
printf("%p", &a);
return 0;
}
三、static(提供项目维护,提供安全保证)
在此之前我们先来了解一些其他的知识
变量可以跨文件访问吗? 是可以的!
函数可以跨文件访问吗? 是可以的!
在具体的应用场景中,如果不想让全局变量和函数跨文件使用的话,这时就可以用到static
1、static修饰全局变量(该变量只在本件中被访问,不能被外部其他文件直接访问)static改变的是变量作用域,生命周期并没有改变
2、static修饰函数(该变量只在本件中被访问,不能被外部其他文件直接访问)static改变的是变量作用域,生命周期并没有改变
3、static修饰局部变量,更改的是生命周期,是生命周期变长, 临时变量—>全局生命周期,将局部变量从栈区—>全局数据区
void fun()
{
int num = 0;
num++;
printf("%d ", num);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
fun();
}
return 0;
}
输出结果
void fun()
{
static int num = 0;
num++;
printf("%d ", num);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
fun();
}
return 0;
}
输出结果
最后:文章有什么不对的地方或者有什么更好的写法欢迎大家在评论区指出来。
|