C 數組
在 C 語言中,有兩種類型的數組:
- 靜态數組:編譯時配置設定記憶體,大小固定。
- 動态數組:運作時手動配置設定記憶體,大小可變。
靜态數組的生命周期與作用域相關,而動态數組的生命周期由程式員控制。
在使用動态數組時,需要注意合理地配置設定和釋放記憶體,以避免記憶體洩漏和通路無效記憶體的問題。
靜态數組
靜态數組是在編譯時聲明并配置設定記憶體空間的數組。
靜态數組具有固定的大小,在聲明數組時需要指定數組的長度。
靜态數組的特點包括:
- 記憶體配置設定:在程式編譯時,靜态數組的記憶體空間就被配置設定好了,存儲在棧上或者全局資料區。
- 大小固定:靜态數組的大小在聲明時确定,并且無法在運作時改變。
- 生命周期:靜态數組的生命周期與其作用域相關。如果在函數内部聲明靜态數組,其生命周期為整個程式執行期間;如果在函數外部聲明靜态數組,其生命周期為整個程式的執行期間。
靜态數組的聲明和初始化示例:
int staticArray[5]; // 靜态數組聲明
int staticArray[] = {1, 2, 3, 4, 5}; // 靜态數組聲明并初始化
對于靜态數組,可以使用 sizeof 運算符來擷取數組長度,例如:
int array[] = {1, 2, 3, 4, 5};
int length = sizeof(array) / sizeof(array[0]);
以上代碼中 sizeof(array) 傳回整個數組所占用的位元組數,而 sizeof(array[0]) 傳回數組中單個元素的位元組數,将兩者相除,就得到了數組的長度。
以上是一個簡單的靜态數組執行個體:
執行個體
#include <stdio.h>
int main() {
int staticArray[] = {1, 2, 3, 4, 5}; // 靜态數組聲明并初始化
int length = sizeof(staticArray) / sizeof(staticArray[0]);
printf("靜态數組: ");
for (int i = 0; i < length; i++) {
printf("%d ", staticArray[i]);
}
printf("\n");
return 0;
}
以上執行個體中,我們聲明并初始化了一個靜态數組 staticArray,它包含了 5 個整數元素,然後我們通過 sizeof 運算符,我們計算了靜态數組的長度,并使用循環周遊并列印數組的元素。
輸出結果:
靜态數組: 1 2 3 4 5
動态數組
動态數組是在運作時通過動态記憶體配置設定函數(如 malloc 和 calloc)手動配置設定記憶體的數組。
動态數組特點如下:
- 記憶體配置設定:動态數組的記憶體空間在運作時通過動态記憶體配置設定函數手動配置設定,并存儲在堆上。需要使用
、malloc
等函數來申請記憶體,并使用calloc
函數來釋放記憶體。free
- 大小可變:動态數組的大小在運作時可以根據需要進行調整。可以使用
函數來重新配置設定記憶體,并改變數組的大小。realloc
- 生命周期:動态數組的生命周期由程式員控制。需要在使用完數組後手動釋放記憶體,以避免記憶體洩漏。
動态數組的聲明、記憶體配置設定和釋放執行個體:
int size = 5;
int *dynamicArray = (int *)malloc(size * sizeof(int)); // 動态數組記憶體配置設定
// 使用動态數組
free(dynamicArray); // 動态數組記憶體釋放
動态配置設定的數組,可以在動态配置設定記憶體時儲存數組長度,并在需要時使用該長度,例如:
int size = 5; // 數組長度
int *array = malloc(size * sizeof(int));
// 使用數組
free(array); // 釋放記憶體
以上代碼我們使用 malloc 函數動态配置設定了一個整型數組,并将長度儲存在變量 size 中。然後可以根據需要使用這個長度進行操作,在使用完數組後,使用 free 函數釋放記憶體。
注意:動态數組的使用需要注意記憶體管理的問題,確定在不再需要使用數組時釋放記憶體,避免記憶體洩漏和通路無效的記憶體位置。
以上是一個簡單的動态數組使用執行個體:
執行個體
#include <stdio.h>
#include <stdlib.h>
int main() {
int size = 5;
int *dynamicArray = (int *)malloc(size * sizeof(int)); // 動态數組記憶體配置設定
if (dynamicArray == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
printf("Enter %d elements: ", size);
for (int i = 0; i < size; i++) {
scanf("%d", &dynamicArray[i]);
}
printf("Dynamic Array: ");
for (int i = 0; i < size; i++) {
printf("%d ", dynamicArray[i]);
}
printf("\n");
free(dynamicArray); // 動态數組記憶體釋放
return 0;
}
以上執行個體中,我們首先聲明了一個變量 size 來指定動态數組的大小。
然後使用 malloc 函數為動态數組配置設定記憶體,并通過 sizeof 運算符計算所需的記憶體大小。
接下來,通過循環和 scanf 函數,從使用者輸入中讀取元素值并存儲到動态數組中。
最後,使用循環周遊并列印動态數組的元素。在程式結束時,使用 free 函數釋放動态數組所占用的記憶體。
請注意,在使用動态數組時,需要檢查記憶體配置設定是否成功(即 dynamicArray 是否為 NULL),以避免在記憶體配置設定失敗時發生錯誤。
C 數組