gpt4 book ai didi

c - 在 C 中返回整数数组指针

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:45 26 4
gpt4 key购买 nike

我试图返回一个指向整数数组的指针,表示将数组中的每个函数应用于值 n 的结果。

#include <math.h>
#include <stdio.h>

typedef int (*funT)(int);
int *mapApply(int n, funT fs[], int size);
int func1(int);
int func2(int);
int func3(int);
int func4(int);
int func5(int);

int main() {

funT array[5] = { func1, func2, func3, func4, func5 };
mapApply(2, array, 5 );

return 0;
}

int func1 (int n) {
return n + 1;
}

int func2 (int n) {
return n + 2;
}

int func3 (int n) {
return n + 3;
}

int func4 (int n) {
return n + 4;
}

int func5 (int n) {
return n + 5;
}

int *mapApply(int n, funT fs[], int size) {
int result[size] = { fs[0](n), fs[1](n), fs[2](n), fs[3](n), fs[4](n) };
return &result;
}

目前我的 mapApply 函数不工作。这是编译错误:

prog.c: In function ‘mapApply’: prog.c:41:2: error: variable-sized object may not be initialized int result[size] = { fs0, fs1, fs2, fs3, fs4 }; ^ prog.c:41:2: warning: excess elements in array initializer [enabled by default] prog.c:41:2: warning: (near initialization for ‘result’) [enabled by default] prog.c:41:2: warning: excess elements in array initializer [enabled by default] prog.c:41:2: warning: (near initialization for ‘result’) [enabled by default] prog.c:41:2: warning: excess elements in array initializer [enabled by default] prog.c:41:2: warning: (near initialization for ‘result’) [enabled by default] prog.c:41:2: warning: excess elements in array initializer [enabled by default] prog.c:41:2: warning: (near initialization for ‘result’) [enabled by default] prog.c:41:2: warning: excess elements in array initializer [enabled by default] prog.c:41:2: warning: (near initialization for ‘result’) [enabled by default] prog.c:42:2: warning: return from incompatible pointer type [enabled by default] return &result; ^ prog.c:42:2: warning: function returns address of local variable [-Wreturn-local-addr]

最佳答案

当你这样做的时候

int *mapApply(int n, funT fs[], int size) {
int result[size] = { fs[0](n), fs[1](n), fs[2](n), fs[3](n), fs[4](n) };
return &result;
}

你有两个错误:

  • 指向result 的指针与mapApply 的返回类型不兼容,并且
  • 您正在尝试返回一个指向本地数组的指针。

要解决此问题,您需要动态分配数组,或将缓冲区传递给函数。以下是动态分配数组的方法:

int *mapApply(int n, funT fs[], int size) {
int *result = malloc(sizeof(int)*size);
for (int i = 0 ; i != 5 ; i++) {
result[i] = fs[i](n);
}
return result;
}

调用者需要释放调用manApply的结果以避免内存泄漏。

关于c - 在 C 中返回整数数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23593597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com