static全局變量和普通全局變量區別?static局部變量和普通局部變量區別?static函數和普通函數區別

static全局變量和普通全局變量區別?static局部變量和普通局部變量區別?static函數和普通函數區別

原創Isanti2015 最後發佈於2017-08-21 20:05:50 閱讀數 1288  收藏
展開
幾者的區別從三個方面考慮: 
1初始化時間 
2 作用域 
3 分配內存空間

static全局變量和普通全局變量區別:

區別:

  1.static全局變量編譯是初始化,在main()函數之前初始化並且僅初始化一次; 
  2.static全局變量限定了作用範圍,僅在定義該變量的源文件中有效,由於靜態全局變量的作用域侷限於一個源文件內,即文件作用域,只能爲該源文件內的函數公用, 因此可以避免在其它源文件中引起錯誤。全局變量可以跨越多個源文件有效,當然,其他不包含全局變量定義的源文件需要用extern關鍵字再次聲明這個全局變量

相同點:都是全局作用域,靜態存儲方式

static局部變量和普通局部變量區別:

區別

  1.static局部變量只被初始化一次,自從第一次被初始化直到程序運行結束都一直存在。普通局部變量,只在函數執行期間存在,函數的一次調用執行結束後,變量被撤銷,其所佔用的內存也被收回。 
  2.靜態局部變量在靜態存儲區分配空間,局部變量在棧裏分配空間。

相同點:兩者都只有局部作用域

static函數和普通函數區別:

區別

  1.普通函數的定義和聲明默認情況下是extern的,但靜態函數只是在聲明他的文件當中可見,不能被其他文件所用。好處:其他文件中可以定義相同名字的函數,不會發生衝突。 
  2.普通函數在C++類中編譯後帶一個隱藏的this參數,而static函數不帶。

相同的

全局變量、靜態全局變量以及靜態局部變量都會被放在程序的靜態數據存儲區(全局可見)中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它們與堆變量、堆變量的區別。 
而局部變量在棧裏分配空間 
從以上分析可以看出,把局部變量改變爲靜態變量後是改變了它的存儲方式即改變了它的生存期。把全局變量改變爲靜態變量後是改變了它的作用域,限制了它的使用範圍。因此static這個說明符在不同的地方所起的作用是不同的。應予以注意。

點贊 4
————————————————
版權聲明:本文爲CSDN博主「Isanti2015」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wangbeibei23/article/details/77455807

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章