如何更改动态调整大小的数组的指针?

时间:2012-03-03 23:11:54

标签: c

我试图通过在另一个数组中加倍动态地将其加倍来增加静态数组。我计划使用malloc()创建新数组,然后复制值。完成后,我计划删除第一个数组,然后将第一个指针指向第二个?

float FirstArray[1];

if (first array is full) {
    float *TempArray = (float*) malloc (sizeof (float) * counter);
    for (loop) {
        TempArray[i] = FirstArray[i];
    }
    //I'm not sure how to point the static array to the dynamic one
    free(FirstArray);
    *FirstArray = &TempArray;
//i get this error with line above
//assignment makes integer from pointer without a cast
}    

3 个答案:

答案 0 :(得分:4)

也许您应该考虑realloc,因为这正是它存在的原因。

答案 1 :(得分:1)

FirstArray也需要动态分配:

int counter = 1;
float *FirstArray = (float *)malloc(sizeof(float)*counter);

if (first array is full) {
float *TempArray = (float*) malloc (sizeof (float) * counter);
for (loop) {
TempArray[i] = FirstArray[i];
}
free(FirstArray);
FirstArray = TempArray;

答案 2 :(得分:0)

自动管理静态数组分配:您不需要(也不应该)分配它,因此您也不应该释放它。您无法分配float * (pointer) to float[N]N-elem静态数组),因为这些数组被编译器视为不兼容的类型。 (静态数组也在init上归零,以提及另一个区别。)

所以基本上你有两个选择:忘记名字FirstArray,用新名字保存它的内容(SecondArray?)。废话..其他方式是从一开始就拥有动态数组。

uint size = 4096;
double * array = ( double * ) malloc( sizeof( double ) * size );

然后复制可能是不必要的,所以使用realloc作为理查德和奥利弗指出。

size <<= 1; /* double size */
array = ( double * ) realloc( ( void * ) array, sizeof( double ) * size );

请注意,realloc的输入和输出指针可能不同。如果没有,复制就不用了。