C語言基礎

C語言中,(1) 在函式中沒有加 static 宣告的區域變數、(2) 以 malloc 配置的區域、(3) 在函式外宣告的變數,各自存在的期間(生命週期)的組合,下列何者正確?

  1. A(1) 到程式結束為止、(2) 到配置它的函式返回為止、(3) 到程式結束為止
  2. B(1) 到離開宣告它的區塊為止、(2) 到以 free 釋放為止、(3) 到程式結束為止
  3. C(1) 到離開宣告它的區塊為止、(2) 到程式結束為止(中途無法釋放)、(3) 到最先使用該變數的函式返回為止
查看答案與解析

正確答案:B. (1) 到離開宣告它的區塊為止、(2) 到以 free 釋放為止、(3) 到程式結束為止

(1) 的自動變數一般放在堆疊上,進入宣告它的區塊時建立,離開時消失。(2) 以 malloc 配置的區域位於堆積,函式返回後仍保留,在以 free 釋放之前都能使用。(3) 函式外的變數(以及加上 static 的變數)在程式執行期間一直存在,放在 .data 或 .bss 這類靜態區域。使用指向生命週期已結束之區域的指標,或忘了 free 而讓區域一直殘留,是常見錯誤的原因。

  • A. 自動變數在離開宣告它的區塊時消失,malloc 的區域在函式返回後仍保留。
  • B. 正確。這是自動、動態、靜態三種生命週期的差異。
  • C. malloc 的區域隨時可以用 free 釋放,函式外的變數在程式執行期間一直存在。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. int 為32位元(最大值 2147483647)。上方的函式 fact(n) 能不發生溢位、正確回傳 n 的階乘的最大 n 為下列何者?
  2. int 為4位元組,指標為8位元組。指向 int 的指標 p 的值(位址)為 0x1000 時,p + 3 的值為下列何者?
  3. int 為4位元組,指標為8位元組。執行上方程式時的輸出,下列何者正確?
  4. int 為4位元組。執行上方程式碼時的輸出,下列何者正確?
  5. 關於放入字串的 char 陣列,執行上方程式碼時的輸出,下列何者正確?