出現位置:第一輪基礎類筆試或技術一面
難度係數:低
相關題目:
(1)列出所有你對static的理解,所有的!
(2)談談你對static的理解(C部分,或者C++部分)。
考點分析:
(1)C語言基礎知識。static。
(2)是否深究技術細節。
解題思路:
static定義的數據存放的區域,怎麼初始化?以及它的生存週期和作用域問題。
本題中,static所在行定義一個靜態的局部變量(已初始化),值存放在數據段中,生存週期是從程序運行到程序結束。(static int count =0只是對count初始化,後來就不再執行該條語句,count的值會變化。如果去掉static,則count的值一直是0)
參數 int i 這一行,定義一個普通的變量,存儲類型實際爲auto,因此,每進入一次這個函數,重新定義這個變量,退出這個函數,這個變量的空間釋放掉。
關於static的理解。首先明確數據的存儲類型和可執行文件的段域問題。
(1)定義一個靜態的變量。對應理解auto存儲類型。初始化,生存週期,作用域。
static int i=10;//局部或者全局
(2)定義一個函數的時候,在當前的文件中可以訪問,這個函數作用域爲當前文件(模塊)。
static int fun();
(3)C++中,類的成員定義時。有靜態成員變量和靜態成員函數。
- class A
- {
- private:
- static int s_value;
- };
- int A::s_value = 0; //初始化
這個成員屬於類本身,對它的訪問全用類。例如:A::s_value。
靜態成員函數:
- class A
- {
- private:
- static void func(int value);
- };
強調一點:同樣是屬於這個類,只能訪問類的靜態成員變量,不能訪問對象的其他數據。
補充題目:
(1)如何在頭文件中聲明一個全局變量。能夠初始化嗎?
如果在頭文件中定義一個靜態變量,因爲靜態變量只屬於某個文件,如果多個.c的文件包含了這個頭文件,實際上相當於定義了多個靜態成員變量(每個文件一個)。
如果在頭文件中聲明瞭一個全局變量,如果被多個.c的文件包含的話,要這樣用:
在*.h中
extern int g_value;//注意,不要初始化值!
然後各個.c的頭文件包含,同時在某一個.c的文件初始化。