動的配列のポインタからサイズを取得することはできるでしょうか? - Shinichi0713/AlgorithmChallenges GitHub Wiki
C言語には、動的配列のポインタ自体から直接サイズを取得する方法はありません。ポインタは配列の先頭要素を指すだけで、配列のサイズ情報を保持していないためです。そのため、配列のサイズを管理するためには、別の方法でサイズを保持しておく必要があります。
一般的な方法は、配列のサイズを変数として保存することです。例えば、構造体を使用して配列とそのサイズを一緒に保持することができます。
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int* array;
size_t size;
} DynamicArray;
// 配列を初期化する関数
DynamicArray initializeArray(size_t initialSize) {
DynamicArray dynArray;
dynArray.array = (int*)malloc(initialSize * sizeof(int));
if (dynArray.array == NULL) {
printf("Memory allocation failed\n");
exit(1);
}
dynArray.size = initialSize;
return dynArray;
}
// 配列のサイズを変更する関数
void resizeArray(DynamicArray* dynArray, size_t newSize) {
dynArray->array = (int*)realloc(dynArray->array, newSize * sizeof(int));
if (dynArray->array == NULL) {
printf("Memory reallocation failed\n");
exit(1);
}
dynArray->size = newSize;
}
int main() {
size_t initialSize = 2;
DynamicArray dynArray = initializeArray(initialSize);
size_t numElements = 0;
// 動的に要素を追加
for (int i = 0; i < 10; i++) {
if (numElements >= dynArray.size) {
resizeArray(&dynArray, dynArray.size * 2);
}
dynArray.array[numElements] = i + 1;
numElements++;
}
// 配列の要素を表示
for (size_t i = 0; i < numElements; i++) {
printf("%d ", dynArray.array[i]);
}
printf("\n");
// 配列のサイズを表示
printf("Array size: %zu\n", dynArray.size);
// 動的配列を解放
free(dynArray.array);
return 0;
}