動態數組基本步驟
- 讀取用戶輸入的數組長度
len。
- 調用
malloc(sizeof(int) * len) 分配堆內存。
- 檢查返回指針是否為
NULL(分配失敗)。
- 使用下標或指針算術訪問元素。
- 使用完畢調用
free() 釋放內存(示例中省略,實際必須釋放)。
完整代碼
#include <stdio.h>
#include <stdlib.h> // 推薦用 stdlib.h 而非 malloc.h
int main(void) {
int len;
int *arr;
printf("請輸入數組長度: ");
if (scanf("%d", &len) != 1 || len <= 0) {
fprintf(stderr, "無效長度\n");
return 1;
}
arr = (int*)malloc(sizeof(int) * len);
if (!arr) {
fprintf(stderr, "內存分配失敗\n");
return 1;
}
printf("請輸入 %d 個整數: ", len);
for (int i = 0; i < len; i++) {
if (scanf("%d", &arr[i]) != 1) {
fprintf(stderr, "輸入錯誤\n");
free(arr);
return 1;
}
}
printf("數組內容:\n");
for (int j = 0; j < len; j++) {
printf("%d:%d ", j, arr[j]);
}
putchar('\n');
free(arr); // 釋放內存
return 0;
}
編譯與運行
$ gcc -std=c99 dynamic_array.c -o dynarr
$ ./dynarr
請輸入數組長度: 5
請輸入 5 個整數: 1 2 3 4 5
數組內容:
0:1 1:2 2:3 3:4 4:5
進階提示
- C99 支援變長數組 (VLA):
int arr[len]; 分配在棧上,無需手動釋放,但大數組可能棧溢出。
- 動態擴容可用
realloc 實現「動態數組」容器。
- 嚴謹代碼必須檢查
malloc/realloc 返回值並配對 free。