在 C 中扩展静态数组

Expanding Static Arrays in C

是否可以在 C 中扩展静态数组?

我尝试创建一个函数,它分配一个新的动态数组,将内容复制到它,returns它是指针;但它没有正常工作,我每次都遇到调试错误。

我需要做这样的事情;

int a1[5] = { 1,2,5,4,1 };
extend(a1); //or  a1* = extend(a1);
.
.
.
a1[9] = 2;

到目前为止我的扩展功能;

int extend(int x[], int oldSize, int newSize) {
    int *extendedX = (int*)calloc(newSize, sizeof(int));

    int i = 0;
    for (; i < oldSize;i++) {
        extendedX[i] = x[i];
    }

    for (; i < newSize; i++) {
        extendedX[i] = 0;
    }

    return *extendedX;
}

extend(a1); //or a1* = extend(a1);

您的函数 extend 需要 return int * 而不仅仅是 int.

int* extend(int x[], int oldSize, int newSize);

此外,您需要创建一个新指针 a2 以分配给 extend 函数的 return 值:

int *a2 = extend( a1, oldSize, newSize );

您不能扩展静态数组,它的大小在编译时确定。

但是,您可以将 a1 声明为指针,并使用静态初始化程序设置初始值,

int *a1 = (int[]){ 1, 2, 5, 4, 1};

然后稍后分配 extend 函数的结果(应该 return 一个 int * 就像 @artm 建议的那样)。

不能扩展静态数组。

你可以这样做:

#include <stdio.h>

int *extends(int ar[],int oldsz,int newsz){
    int *newAr = malloc(newsz*sizeof(int));
    for(int i = 0; i < oldsz;i++){
        newAr[i] = ar[i];
    }
    return newAr;
}
int main(void) {
    int i,a[5] = { 1, 2, 3, 4, 5};
    int *a1 = extends(a,5,10);
    a1[5] = 6;
    a1[6] = 7;
    a1[7] = 8;
    a1[8] = 9;
    a1[9] = 10;
    a1[10] = 11;
    a1[11] = 12;
    for(i = 0; i < 12; i++)printf("%d ",a1[i]);
    return 0;
}