方法1: malloc関数を使用する方法
#include <stdio.h>
#include <stdlib.h>
int main() {
int size;
printf("配列のサイズを入力してください: ");
scanf("%d", &size);
int* array = (int*)malloc(size * sizeof(int));
if (array == NULL) {
printf("メモリの割り当てに失敗しました。\n");
return 1;
}
// 配列の使用
for (int i = 0; i < size; i++) {
array[i] = i + 1;
}
// 配列の表示
printf("配列の要素: ");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
// メモリの解放
free(array);
return 0;
}
方法2: calloc関数を使用する方法
#include <stdio.h>
#include <stdlib.h>
int main() {
int size;
printf("配列のサイズを入力してください: ");
scanf("%d", &size);
int* array = (int*)calloc(size, sizeof(int));
if (array == NULL) {
printf("メモリの割り当てに失敗しました。\n");
return 1;
}
// 配列の使用
for (int i = 0; i < size; i++) {
array[i] = i + 1;
}
// 配列の表示
printf("配列の要素: ");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
// メモリの解放
free(array);
return 0;
}
方法3: realloc関数を使用する方法
#include <stdio.h>
#include <stdlib.h>
int main() {
int size;
printf("配列の初期サイズを入力してください: ");
scanf("%d", &size);
int* array = (int*)malloc(size * sizeof(int));
if (array == NULL) {
printf("メモリの割り当てに失敗しました。\n");
return 1;
}
// 配列の使用
for (int i = 0; i < size; i++) {
array[i] = i + 1;
}
// 配列の表示
printf("初期配列の要素: ");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
int newSize;
printf("\n新しい配列のサイズを入力してください: ");
scanf("%d", &newSize);
int* newArray = (int*)realloc(array, newSize * sizeof(int));
if (newArray == NULL) {
printf("メモリの再割り当てに失敗しました。\n");
free(array);
return 1;
}
// 新しい配列の使用
for (int i = size; i < newSize; i++) {
newArray[i] = i + 1;
}
// 新しい配列の表示
printf("新しい配列の要素: ");
for (int i = 0; i < newSize; i++) {
printf("%d ", newArray[i]);
}
// メモリの解放
free(newArray);
return 0;
}
これらの方法を使用することで、C言語で動的に配列のサイズを確保することができます。各方法にはそれぞれ異なる利点と制約がありますので、使用する前に状況に合わせて適切な方法を選択してください。