将返回的指针分配给数组

我有一个函数返回float *,它实际上作为返回函数中的数组填充,这样

float* some_fnc() { float *x=malloc(sizeof(float)*4); x[0]=...... } ... // in main float y[4]; y=some_fnc(); 

但是我收到“不兼容的类型”错误,这是正常的吗? 有没有办法克服这个w / o声明y为浮动*?

您无法修改arrays的地址。 为什么不将y作为参数传递给some_fnc? (或者)如果你只知道运行时的大小而不使用main中的数组,你可以使用浮点指针。

C不支持/允许分配数组(即使它确实支持数组的初始化,这看起来像赋值)。 您有多种选择。 一种是将数组的地址传递给函数,并让它填充现有的数组而不是为它分配空间:

 void some_func(float *array, int size) { for (i=0; i 

另一种可能性是在main中只有一个指针来保存函数返回的指针:

 float *y = some_fnc(); // use y. Note that array style notation (y[0], y[1], etc.) is still allowed. // when you're done with y. free(y); 

在您的代码中,您基本上分配了两个不同的数组,一个在堆栈上,另一个在malloc 。 即使您可以在C中分配数组(您不能),每次调用函数时,使用malloc分配的数组都会泄漏内存,因此您最终不应该这样做。

因此,如果您想使用malloc在堆上分配数组,除了将其定义为float*之外别无其他方法。 如果你这样做,不要忘记在你不再需要的时候free它。

另一方面,如果您真的想要堆栈上的数组(注意可能的堆栈溢出 ),您必须将此位置传递给您的函数,以便它可以将它用于您的初始化代码。

正如其他人所提到的,您正在尝试分配一个指向数组的指针,但这不起作用。 如果你真的想这样做,你可以改用结构。

 struct foo { float f[4]; } struct foo some_fnc() { struct foo x; xf[0] = 0.1; xf[1] = 1.0; xf[2] = 3.14159; xf[3] = 42; return x; } ... // in main struct foo y; y = some_fnc(); 

另一种选择是将y的地址传递给some_fnc

 void some_fnc( float x[4]) { x[0]=...... } ... // in main float y[4]; some_fnc(y);