如何提高网站的自然排名,网站快排,网站运营的思路,西安中高风险地区C语言中static的用法#xff08;超级详细版#xff09;
static是C语言中的关键字。 static是静态的意思#xff0c;可以用来#xff1a; 1.修饰局部变量 2.修饰全局变量 3.修饰函数 在学习static之前#xff0c;我们要先了解一下作用域和生命周期。
作用域和生命周期
作…C语言中static的用法超级详细版
static是C语言中的关键字。 static是静态的意思可以用来 1.修饰局部变量 2.修饰全局变量 3.修饰函数 在学习static之前我们要先了解一下作用域和生命周期。
作用域和生命周期
作⽤域scope是程序设计概念通常来说⼀段程序代码中所⽤到的名字并不总是有效可⽤的⽽限定这个名字的可⽤性的代码范围就是这个名字的作⽤域。
局部变量的作⽤域是变量所在的局部范围。全局变量的作⽤域是整个⼯程项⽬。
⽣命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段。
局部变量的⽣命周期是进⼊作⽤域变量创建⽣命周期开始出作⽤域⽣命周期结束。全局变量的⽣命周期是整个程序的⽣命周期。
下面举一个简单的例子解释一下局部变量和全局变量的作用域、生命周期。
#includestdio.h
int a 1;//a为全局变量a的作用域是整个程序a的生命周期为整个程序的生命周期
int main()
{if (a 0) {int c 200;//创建局部变量c生命周期开始printf(%d, c);}//{}之间的为局部变量c的作用域出作⽤域⽣命周期结束else {int b 100;//创建局部变量bprintf(%d, b);}//{}之间的为局部变量b的作用域出作⽤域⽣命周期结束return 0;
}相信大家对作用域和生命周期已经有了很好的了解现在步入正题
static修饰局部变量
同样最开始为大家举一个简单的例子通过最直观的代码了解static。
#includestdio.hvoid test()
{int a 0;//每一次进入test函数a都会被重新赋值a;//由于test函数没有返回值所以a的计算对主函数的循环没有影响printf(%d, a);
}
int main()
{int a 0;for (a 0; a 5; a){test();}return 0;
}上述代码的test函数中的局部变量a是每次进⼊test函数先创建变量⽣命周期开始并赋值为0然后 再打印出函数的时候变量⽣命周期将要结束释放内存。
那么现在我想要a的值有累加的效果我应该怎样修改上述代码呢 此时就用到了static。
#includestdio.hvoid test()
{static int a 0;//直接在int前加上statica;printf(%d, a);
}
int main()
{int a 0;for (a 0; a 5; a){test();}return 0;
}代码中我们从输出结果来看i的值有累加的效果其实test函数中的a创建好后出函数的时候是 不会销毁的重新进⼊函数也就不会重新创建变量直接上次累积的数值继续计算。
结论static修饰局部变量改变了变量的⽣命周期⽣命周期改变的本质是改变了变量的存储类型本 来⼀个局部变量是存储在内存的栈区的但是被 static 修饰后存储到了静态区。存储在静态区的变 量和全局变量是⼀样的⽣命周期就和程序的⽣命周期⼀样了只有程序结束变量才销毁内存才 回收。但是作⽤域不变的。 static修饰全局变量 本质原因是全局变量默认是具有外部链接属性的在外部的⽂件中想使⽤只要适当的声明就可以使 ⽤但是全局变量被 static 修饰之后外部链接属性就变成了内部链接属性只能在⾃⼰所在的源 ⽂件内部使⽤了其他源⽂件即使声明了也是⽆法正常使⽤的。
static修饰函数
其实 static 修饰函数和 static 修饰全局变量是⼀模⼀样的⼀个函数在整个⼯程都可以使⽤ 被static修饰后只能在本⽂件内部使⽤其他⽂件⽆法正常的链接使⽤了。 所以static修饰函数在这里我就不在赘述了直接上代码
最后希望这篇文章对你有所帮助哦