在C語言中static是非常重要的一個關鍵字
static意為靜態的,它的用法基本分為三種
1. 修飾局部變量(改變局部變量的生命周期)
2. 修飾全局變量(使全局變量僅作用于當前源文件)
c語言static int的值會變嗎、3. 修飾函數(使函數僅作用與當前源文件)
怎么修飾的?而生命周期又是怎么被改變的?
我舉個例子,讓我們一起來看一下
c語言變量的作用域和生命周期?先寫一串取a的地址的代碼
現在我們運行這段代碼,取a的地址來看一下
a的地址為00eff748
c語言中%s和%c、好,我們接著再運行一次
?會發現,a的地址變成了012ff8b4
a的地址變了,a的生命周期就只有一個循環
是因為a的前面其實還隱藏了一個關鍵字auto
c語言局部變量和全局變量,auto意為自動的,它是個自動變量,自動創建,自動銷毀
如果不加隱藏我們的代碼其實是這樣的
auto是自動生成的,即使你把它刪掉,它其實還在那
c語言周期函數?那我們怎么改變a的生命周期呢,這時候static就派上用場了
只要我們在int a = 0;前面加上static就可以了,用static把auto頂替掉
?這時候我們再來測會發現,不管運行多少次,a的地址都變為了一個定值
static變量的生命周期??我們就能總結出一點,static把a的生命周期改變了
當然,static不止用于地址,它在循環中的表現同樣出色
可以看到,上面兩組代碼,一個加了static修飾,一個沒加
左邊代碼沒有static修飾a,所以a的生命周期就只有一個循環,一個循環結束就會被重置為1
c語言形參與實參?所以printf打印出來的結果為2 2?2 2 2 2 2 2 2?2
而右邊代碼有個static修飾,a的生命周期被延長,取消了自動銷毀的特性,所以每次循環中a的值都+1
所以printf打印出來的結果為2 3 4 5 6 7 8? 9 10 11?
對,還要補充一點?
c語言函數調用的方式有哪些。static修飾局部變量,表面上是改變局部變量的生命周期
本質上是改變了變量的存儲類型,由棧區變為靜態區
(內存基本劃分為幾個區域,棧區,堆區,靜態區)
?這里就不細說了
c語言算法的概念、stiatic修飾全局變量,使全局變量由作用整個工程變為僅作用于當前源文件
本質上是將全局變量的外部鏈接屬性變為內部鏈接屬性
static修飾函數跟static修飾全局變量的本質基本一致
第一次寫博客,本人也才剛學編程4天,有什么錯誤的地方還請大佬們指出來
先生們有何教我?
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态