2

child_prog() 我试图从to返回一个数组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;
}

现在编译器生成一个错误,指出它不能将返回的值分配给C(这是一个类型) (这是一个类型)。确实,当我创建 10 个内存时,该程序运行良好。但我不明白为什么编译器不能将返回的值分配给(一个定义为的数组,因此是一个指针)(一个定义为的数组,因此又是一个指针)。int[]child_progint*Cint*mallocintsCC[10]child_progstatic int out[10]

4

4 回答 4

5
  1. 您不能分配给数组。你需要memcpy它。
  2. int*!=int[]虽然第一个是可能指向一个s序列的指针第二个是一个s序列intintint
  3. 您可以使用int *C;并传递数组的长度(如果在编译时未知)作为输出参数。
  4. static int out[10];不是malloced,而是静态的。
于 2012-05-19T06:09:32.683 回答
1

一种解决方案是将 C 声明为:

int *C;

正如 Binyamin 所说,您无法更改数组的地址,因为它是静态分配的,而这正是您要尝试的:

C = child_prog(some_input);
于 2012-05-19T06:24:22.560 回答
0
  • 的类型意味着它指向的内存int []int * const一个常量,尝试更改它会导致编译器错误。显然不等于int *
  • 变量outinchild_prog()是静态分配的,这意味着它不在堆栈上,而是在全局数据部分的某个位置。因此,无论您调用多少次child_prog(),您总是会返回相同的内存位置。
  • 因此,要复制数组,memcpy(dest,src,bytes)如果要保存从child_prog().
于 2012-05-19T06:26:38.090 回答
0
#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;
}
于 2012-05-19T06:34:14.560 回答