26. 給定以下 C 程式片段,請問下列哪兩個變數位於同樣的記憶體區段?

(A) a 和 b
(B) b 和 c
(C) a 和 c
(D) c 和 c [1]

答案:登入後查看
統計: A(8), B(45), C(15), D(23), E(0) #3099743

詳解 (共 4 筆)

#5808037
在提供的程式片段中,變數 a 和 b 分...
(共 362 字,隱藏中)
前往觀看
7
2
#6463031
  • 針對這個 C 程式碼片段,我們來分析各變數的記憶體配置位置:
C

int a; // 全域變數

int main(void) { int b; // 區域變數 int *c = (int *)malloc(sizeof(int) * 10); // 堆積記憶體 free(c); }

  • 變數 a

    • 它在 main 函式之外定義,是一個全域變數(Global Variable)
    • 全域變數通常存放在程式的**資料段(Data Segment)**中(或靜態儲存區)。
  • 變數 b

    • 它在 main 函式內部定義,是一個區域變數(Local Variable)
    • 區域變數通常存放在程式的**堆疊(Stack)**中。
  • 變數 c

    • c 是一個指標變數,它本身(儲存記憶體位址的那個變數)是定義在 main 函式內部,所以它也是一個區域變數,存放在堆疊中。
    • 但是,c 指向的記憶體空間是由 malloc 函數動態分配的。malloc 分配的記憶體來自於堆積(Heap)。所以 c 指向的是堆積記憶體。
  • c[1]

    • c[1] 表示的是 c 指向的那塊記憶體區域中的第二個整數元素。這塊記憶體是由 malloc 在堆積上分配的。

現在我們來看看選項:

  • (A) a 和 b:a 在資料段,b 在堆疊。不在同樣的記憶體區段。
  • (B) b 和 c:b 是區域變數,存放在堆疊。c 變數本身(指標)也是區域變數,存放在堆疊。它們的儲存位置都在堆疊中。這是正確的。
  • (C) a 和 c:a 在資料段,c(指標本身)在堆疊。不在同樣的記憶體區段。
  • (D) c 和 c[1]:c(指標本身)在堆疊。c[1] 是 c 所指向的堆積記憶體中的一個元素。它們不在同樣的記憶體區段。

因此,b 和 c(指標本身)都位元在堆疊這個記憶體區段。

The final answer is B​

0
0
#6496414
int a;:全域變數,未初始化,位於B...
(共 300 字,隱藏中)
前往觀看
0
0
#6345666

在 C 語言中,變數的儲存位置取決於它們的類型和生命週期:

  1. a (全域變數)

    • a 是一個全域變數,會被分配到靜態區段 (靜態記憶體, Data Segment 或 BSS/Initialized Data Segment)

  2. b (區域變數)

    • b 是 main() 內的區域變數,它會被分配到堆疊 (Stack)

  3. c (動態分配的記憶體)

    • c 本身是一個區域變數(指標),存放在堆疊 (Stack)

    • 但 malloc(sizeof(int) * 10) 分配的記憶體在堆區 (Heap),因此 c 指向的記憶體位置位於 Heap,而 c 本身在 Stack。

選項分析:

(A) a 和 b錯誤 (a 在靜態區段,b 在堆疊)
(B) b 和 c正確 (b 和 c 都是區域變數,位於堆疊)
(C) a 和 c錯誤 (a 在靜態區段,c 在堆疊)
(D) c 和 c[1]錯誤 (c 本身在堆疊,而 c[1] 指向的記憶體在堆區)

0
0