「C語言」static三大作用,面試高頻題,快做筆記!

2020-12-08 萬樹IT學院

點擊藍字

關注我們 FOLLOW US

static(計算機高級語言關鍵字)

static三大作用:

修飾局部變量–靜態局部變量修飾全局變量–靜態全局變量修飾函數–靜態函數

01

修飾局部變量–靜態局部變量

把局部變量改變為靜態變量後是改變了它的存儲方式即改變了它的生命周期。但不改變他的作用域。

static局部變量只被初始化一次,下一次依據上一次結果值;

原始碼如下:

1.未經static修飾的局部變量

運行結果:

結論:未經static修飾時每次i被調用的值都為0;生命周期隨著每次函數的調用而更新。

2.static修飾的局部變量

運行結果:

結論:經static修飾後的局部變量,不隨著函數的每次調用而更新,而是沿用上一次的值,被初始化一次。生命周期隨著代碼運行結束而結束。

02

修飾全局變量–靜態全局變量

全局變量之前以static 修飾就構成了靜態的全局變量。

當一個源程序由多個源文件組成時,非靜態的全局變量在各個源文件中都是有效的。而靜態全局變量則限制了其作用域, 即只在定義該變量的源文件內有效, 在同一源程序的其它源文件中不能使用它。由於靜態全局變量的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其它源文件中引起錯誤。

static全局變量只初使化一次,防止在其他文件單元中被引用。

1.未經static修飾的全局變量

運行結果:

結論:未經修飾時可跨文件使用,輸出結果為10;

2.static修飾的全局變量

運行結果:

結論:不可跨文件使用全局變量,輸出的是系統給的默認值0而非10。

03

修飾函數–靜態函數

1.未經static修飾的函數

運行結果:

結論:可跨文件調用函數輸出結果3。

2.static修飾的函數

運行結果:

結論:經static修飾後不可跨文件調用函數,並報錯。

04

總結

靜態函數會被自動分配在一個一直使用的存儲區,直到程序結束才從內存消失,避免調用函數時壓棧出棧,速度快很多其他文件可以定義相同名字的函數,不會發生衝突靜態函數不能被其它文件調用,作用於僅限於本文件當我們同時編譯多個文件時,所有未加static前綴的全局變量和函數都具有全局可見性。如果加了static,就會對其它源文件隱藏。

文章作者:LHlucky_2來自CSDN論壇,如有侵權,請聯繫刪除。

作者:CSDN-LHlucky_2

微信號|wanshuIT

新浪微博|萬小樹IT

相關焦點

  • C語言之 static
    通過圖理解一下:這裡的 num 就是全局靜態變量,而 temp 是局部靜態變量,而函數 fun1 和 fun2 在同一文件中,所以變量名必須不同,但是在不同文件下,又可以繼續使用 fun1 和 fun2 函數名了。說完常見的,現在來看看不常見的。如果在頭文件中使用 static 會發生什麼情況呢?
  • C語言應用筆記(二):C語言static關鍵字及其使用
    前言:在C語言中,static的字面意思容易給我們帶來些許誤解,在開發過程中,我們經常會需要定義一些static類型的變量和函數,
  • C 中 static 的常見作用
    1)內存中的位置:靜態存儲區  2)初始化:未經初始化的全局靜態變量會被程序自動初始化為0(自動對象的值是任意的,除非他被顯示初始化)  3)作用域:作用域仍為局部作用域,當定義它的函數或者語句塊結束的時候,作用域隨之結束。註:當static用來修飾局部變量的時候,它就改變了局部變量的存儲位置,從原來的棧中存放改為靜態存儲區。
  • C語言中static的常見作用
    1)內存中的位置:靜態存儲區  2)初始化:未經初始化的全局靜態變量會被程序自動初始化為0(自動對象的值是任意的,除非他被顯示初始化)  3)作用域:作用域仍為局部作用域,當定義它的函數或者語句塊結束的時候,作用域隨之結束。註:當static用來修飾局部變量的時候,它就改變了局部變量的存儲位置,從原來的棧中存放改為靜態存儲區。
  • C語言中的變量存儲類型static老手都這樣用
    static老手都這樣用。1、 先來回顧C語言變量C語言中變量值的存儲位置有兩類:CPU的寄存器和內存。變量存儲類型關係到其存儲位置,除了register型存儲在CPU寄存器中,C語言提供的其它三種存儲類型(auto型、static型、extern型)的變量均存儲在內存中。存儲位置不同,決定了變量的生存期和作用域。具體變量介紹請見作者的另一篇文章,名為《說一說C語言中的變量存儲類型——「extern」》。
  • 單片機C語言中 static 用法小結
    一、c程序存儲空間布局C程序一般由下列部分組成:本文引用地址:http://www.eepw.com.cn/article/201611/315900.htm1)正文段——CPU執行的機器指令部分
  • C語言中auto register static const volatile 區別
    (3)static常見的兩種用途:1>統計函數被調用的次數;2>減少局部數組建立和賦值的開銷.變量的建立和賦值是需要一定的處理器開銷的,特別是數組等含有較多元素的存儲類型。在一些含有較多的變量並且被經常調用的函數中,可以將一些數組聲明為static類型,以減少建立或者初始化這些變量的開銷.
  • static和extern對函數的作用
    C語言規定,不允許有同名的外部函數。內部函數:如果在當前文件中定義的函數不允許其他文件訪問、調用,只能在內部使用,就稱為內部函數。C語言規定不同的源文件可以有同名的內部函數,並且互不幹擾。想法2:在main.c中包含one.c文件大家都知道#include的作用純粹就是內容拷貝,所以又相當於哎,這麼一看好像是對的哦,在main函數前面定義了個one函數,然後在main函數中調用了這個one函數。從語法上看是對的,所以編譯是沒問題的。
  • C語言中的static和extern關鍵字
    因為在app開發中,定義網絡連結或者設定常用變量時經常會用到一些C中的關鍵字,但很多同學只見其名而不知其意,今天就介紹2個開發中常用的C語言關鍵字
  • 連夜整理了28頁C語言/C++常見面試題(含答案)
    連夜整理了68道
  • C語言 | static靜態變量
    在編程方面有著天賦異稟的人畢竟是少數,我們大多數人想要從C語言小白進階到高手,需要經歷的是日積月累的學習。那麼如何學習呢?當然是每天都練習一道C語言題目!!作者閆小林白天搬磚,晚上做夢。我有故事,你有酒麼?例87:學習C語言static定義靜態變量的用法。
  • 連夜整理了68道C語言/C++常見面試題(含答案)
    連夜整理了68道
  • 李老師帶你做二級C語言選擇題真題,輕鬆過級「14」
    李老師帶你做二級C語言選擇題真題,輕鬆過級「10」第【11】期(輸入輸出11-15題):李老師帶你做二級C語言選擇題真題,輕鬆過級「11」第【12】期(輸入輸出16-20題):李老師帶你做二級C語言選擇題真題,輕鬆過級「12」第【13】期(輸入輸出21-25題):
  • 李老師帶你做二級C語言選擇題真題,輕鬆過級「13」
    李老師帶你做二級C語言選擇題真題,輕鬆過級「9」第【10】期(輸入輸出6-10題):李老師帶你做二級C語言選擇題真題,輕鬆過級「10」第【11】期(輸入輸出11-15題):李老師帶你做二級C語言選擇題真題,輕鬆過級「11」第【12】期(輸入輸出16-20題):
  • C/C++編程筆記:C 語言編程面試常見問題,大廠面試必備
    C語言面試題,需要準備面試,以後走C/C++程式設計師這條路的小夥伴建議收藏起來~ 但是變量/函數的聲明起著重要的作用。這就是變量/函數的類型。因此,在聲明變量時,程序會知道該變量的數據類型。在聲明函數的情況下,程序知道該函數的參數是什麼,它們的數據類型,參數的順序和函數的返回類型。這就是聲明。關於定義,當我們定義變量/函數時,除了聲明的作用外,它還為該變量/函數分配內存。因此,我們可以將定義視為聲明的超集。(或聲明作為定義的子集)。
  • 一個static和面試官扯了一個小時,舌戰加強版
    講故事最近也是奇怪,在社區裡看到好幾篇文章聊static 的玩法以及怎麼拿這個和面試官扯半個小時,有點意思,點進去看都是java版的,這就沒意思了,怎麼也得有一篇和面試官扯C# 中的 static用法撒,既然沒有人開這個頭,那我就獻醜了。。。,下面以QA的方式記述,大家可以代入一下能回答幾個問題。二:QA環節         解析:可能面試官潛意識的想問問你會不會使用本地緩存。
  • 李老師帶你做二級C語言選擇題真題,輕鬆過級「10」
    #c語言李老師帶你做二級C語言選擇題真題,輕鬆過級「7」第【8】期(基本語法36-41題):李老師帶你做二級C語言選擇題真題,輕鬆過級「8」第【9】期(輸入輸出1-5題):李老師帶你做二級C語言選擇題真題,輕鬆過級「9」第【10】期、輸入輸出(6-10題)
  • 有憑有據 C語言真的比Java快?
    今天小編由在某人的博客中看到一篇文章,以這篇文章的內容做個引子開個頭,他比較了很多語言的運行速度,包括Ruby、Io、 PHP、Python、Lua、Java、Perl、Applescript、TCL、Javascript、OCaml、Ghostscript和C等。
  • C語言面試54題
    C語言面試54題大家好,這期呢,我們談一下c語言的面試題。
  • 「軟帝學院」:20道經典Java程式設計師編程面試基礎題
    對於很多初入編程行業的程式設計師來說,第一次面試編程工作時是最緊張最無助的,因為他們從來沒有面試過這類工作,不知道主考官會問什麼。那麼一般初級Java面試時會問哪些問題呢?廣州華信智原在這裡為大家準備了20道經典Java面試基礎題。1、如果main方法被聲明為private會怎樣?