動的配列をC言語で実装する方法は何ですか?
C言語で動的配列を実現する方法は大きく以下のいくつかがあります:
- ポインタを使用する:ポインタ変数を定義し、動的にメモリ領域を割り当て、ポインタを使用して配列要素にアクセスします。malloc()関数を使用してメモリ領域を動的に割り当て、free()関数を使用してメモリ領域を解放できます。
サンプルコード:
int* arr;
int size;
printf("请输入数组大小:");
scanf("%d", &size);
arr = (int*)malloc(sizeof(int) * size); // 动态分配内存空间
if (arr == NULL) {
printf("内存分配失败\n");
return 0;
}
// 使用arr指针访问数组元素
for (int i = 0; i < size; i++) {
arr[i] = i + 1;
}
// 释放内存空间
free(arr);
- realloc()関数を使用すると、元の動的メモリ空間を再割り当てして、配列のサイズを拡大または縮小することができます。
サンプルコード:
int* arr;
int size;
printf("请输入数组大小:");
scanf("%d", &size);
arr = (int*)malloc(sizeof(int) * size); // 动态分配内存空间
if (arr == NULL) {
printf("内存分配失败\n");
return 0;
}
// 使用arr指针访问数组元素
for (int i = 0; i < size; i++) {
arr[i] = i + 1;
}
// 重新分配内存空间
size += 5; // 扩展数组大小
arr = (int*)realloc(arr, sizeof(int) * size);
if (arr == NULL) {
printf("内存分配失败\n");
return 0;
}
// 使用arr指针访问扩展后的数组元素
for (int i = 0; i < size; i++) {
arr[i] = i + 1;
}
// 释放内存空间
free(arr);
- 構造体を使用する: ポインタと配列のサイズを含む構造体を定義し、動的にメモリ空間を割り当て、ポインタを使用して配列要素にアクセスします。
サンプルコード:
typedef struct {
int* arr;
int size;
} DynamicArray;
DynamicArray createArray(int size) {
DynamicArray dynamicArray;
dynamicArray.arr = (int*)malloc(sizeof(int) * size); // 动态分配内存空间
dynamicArray.size = size;
return dynamicArray;
}
void freeArray(DynamicArray dynamicArray) {
free(dynamicArray.arr); // 释放内存空间
}
int main() {
int size;
printf("请输入数组大小:");
scanf("%d", &size);
DynamicArray dynamicArray = createArray(size);
// 使用dynamicArray.arr指针访问数组元素
for (int i = 0; i < dynamicArray.size; i++) {
dynamicArray.arr[i] = i + 1;
}
freeArray(dynamicArray);
return 0;
}
実現する方法はいくつかありますが、どの方法を選択するかは、実際の要件や個人の好みによって決定されます。