我试图将数组从child_prog()
返回给main()
。代码如下所示:
#include<stdio.h>
#include<stdlib.h>
int* child_prog(int some_input);
void main(void){
int C[10];
int some_input;
C = child_prog(some_input);
}
int* child_prog(int some_input){
static int out[10];
// ...
// ... some wizardry
return out;
}
现在编译器生成一个错误,指出它无法将从child_prog
(int*
类型(返回的值分配给C
(这是一种int[]
类型(。事实上,当我C
int*
并malloc
10 ints
内存时,该程序运行良好。但我不明白为什么编译器不能将从child_prog
(定义为 static int out[10]
的数组,因此又是一个指针(分配给C
(定义为 C[10]
的数组,因此又是一个指针(。
- 不能分配给数组。你需要
memcpy
它。 -
int*
!=int[]
第一个是可能指向int
s 序列int
的指针,第二个是int
s 序列 - 您可以使用
int *C;
并将数组的长度(如果在编译时未知(作为 out 参数传递。 -
static int out[10];
不是malloc
的编辑,而是静态的。
一种解决方案是将 C 声明为:
int *C;
正如宾亚明所说您无法更改数组的地址,因为它是静态分配的,这正是您尝试的:
C = child_prog(some_input);
int []
的类型是int * const
这意味着它指向的内存是一个常量,尝试更改它将给出编译器错误。显然不等于int *
.child_prog()
中的变量out
是静态分配的,这意味着它不在堆栈上,而是在全局数据部分的某个地方。因此,无论您调用child_prog()
多少次,您都将始终返回相同的内存位置。- 因此,要复制数组,如果要保存从
child_prog()
返回的数据,请执行memcpy(dest,src,bytes)
。
#include<stdio.h>
#include<stdlib.h>
#define SUCCESS 0
#define FAILURE 1
int child_prog(int some_input, int *output, int output_size);
void main(void){
int C[10];
int some_input;
C = child_prog(some_input, c, 10);
}
int child_prog(int some_input, int *output, int output_size)
{
static int source[10];
...
.../*some wizardry*/
memcpy(output, source, output_size);
... if (erronous Condition)
return FAILURE;
else
return SUCCESS;
}