面試題:static有什麼作用?
答:在C語言中,static主要定義全局靜態變量,定義局部靜態變量,定義靜態函數
一、 定義全局靜態變量 :在全局變量前面加上關鍵字static,該全局變量變成了全局靜態變量。全局靜態變量有以下特點:
(1) 在全局數據區內分配內存
(2) 如果沒有初始化,其默認值爲0
(3) 該變量在本文件內從定義開始到文件結束可見
二、 定義局部靜態變量:在局部靜態變量前面加上關鍵字static,該局部變量便成了靜態局部變量。靜態局部變量有以下特點:
(1) 該變量在全局數據區分配內存
(2) 如果不顯示初始化,那麼將被隱式初始化爲0
(3) 它始終駐留在全局數據區,直到程序運行結束
(4) 其作用域爲局部作用域,當定義它的函數或語句塊結束時,其作用域隨之結束。
三、 定義靜態函數:在函數的返回類型加上static關鍵字,函數即被定義成靜態函數。靜態函數有以下特點:
(1) 靜態函數只能在本源文件中使用
(2) 在文件作用域中聲明的inline函數默認爲static
說明:靜態函數只是一個普通的全局函數,只不過受static限制,他只能在文件坐在的編譯單位內使用,不能呢個在其他編譯單位內使用。
在C++語言中新增了兩種作用:定義靜態數據成員或靜態函數成員
一, 定義靜態數據成員。靜態數據成員有如下特點:
(1) 內存分配:在程序的全局數據區分配
(2) 初始化和定義:靜態數據成員定義時要分配空間,所以不能在類聲明中初始化。
二, 靜態成員函數。靜態成員函數與類相聯繫,不與類的對象相聯繫。靜態成員函數不能訪問非靜態數據成員。原因很簡單,非靜態數據成員屬於特定的類實例,靜態成員函數主要用於對靜態數據成員的操作。
(1) 靜態成員函數沒有this指針。
轉自:http://blog.csdn.net/leo115/article/details/8085414 與原文有出入的地方已標註。