在 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;
}
是否可以在 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;
}