static的全面理解(C部分)

出現位置:第一輪基礎類筆試或技術一面

難度係數:低




相關題目:

(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++中,類的成員定義時。有靜態成員變量和靜態成員函數。

  1.            class A
  2. {
  3. private:
  4.         static int s_value;
  5. };
  6. int A::s_value = 0; //初始化

這個成員屬於類本身,對它的訪問全用類。例如:A::s_value。


      靜態成員函數:

  1.       class A
  2.       {
  3.       private:
  4.          static void func(int value);
  5.       };

      強調一點:同樣是屬於這個類,只能訪問類的靜態成員變量,不能訪問對象的其他數據。


       補充題目:

      (1)如何在頭文件中聲明一個全局變量。能夠初始化嗎?

       如果在頭文件中定義一個靜態變量,因爲靜態變量只屬於某個文件,如果多個.c的文件包含了這個頭文件,實際上相當於定義了多個靜態成員變量(每個文件一個)。

       如果在頭文件中聲明瞭一個全局變量,如果被多個.c的文件包含的話,要這樣用:

       在*.h中

       extern int g_value;//注意,不要初始化值!

       然後各個.c的頭文件包含,同時在某一個.c的文件初始化。

發佈了39 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章