栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言中的关键字auto,register,static

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言中的关键字auto,register,static

一、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("%fn", 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;//error
int main()
{
	register float a = 1.2f, b = 1.3f, c;
	c = a + b;
	printf("%fn", c );
	
}

不会被写入的(写入的就需要写回内存,后续还要读取检测的话,register的意义在哪) 高频的被读取(提高效率所在) 如果要使用,请不要大量的使用,因为寄存器的数量有限 2、register修饰的变量不能取地址(因为已经放在寄存器当中了,地址是内存相关的概念)
int main()
{
	register int a = 1;
	printf("%p", &a);//error
	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;
}
输出结果

最后:文章有什么不对的地方或者有什么更好的写法欢迎大家在评论区指出来。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/993623.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号