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
統計: A(8), B(45), C(15), D(23), E(0) #3099743
詳解 (共 4 筆)
#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
#6345666
在 C 語言中,變數的儲存位置取決於它們的類型和生命週期:
-
a (全域變數)
-
a 是一個全域變數,會被分配到靜態區段 (靜態記憶體, Data Segment 或 BSS/Initialized Data Segment)。
-
-
b (區域變數)
-
b 是 main() 內的區域變數,它會被分配到堆疊 (Stack)。
-
-
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