错误:'数组'在这方面没有申明

时间:2014-05-14 06:55:09

标签: c arrays

我正在调用一个返回3D array的函数。问题是,如果我在函数内部声明数组,它会返回一个悬空指针,因为程序的执行超出了变量的范围。但是当我在函数外部声明数组时,它会给出Error:'array' was not declared in this scope。我应该如何声明数组?它返回整数类型。

int arr[x][y][z];
int func(list of parameters)
{
  //code
  return arr;
}

int main()
{
  int arr2[x][y][z];
  arr2 = func(list of parameters);
  return 0;
}

3 个答案:

答案 0 :(得分:0)

您尝试返回名为arr的整数值,但未在函数范围中定义int arr

C 不允许按值返回数组 。您需要将指向数组的指针传递给函数,以便让它修改数组。

类似的东西:

void func(int*** array, <list of parameters>)
{
  //code
  array[1][2][4] = 10;
}


int main()
{
  int arr2[x][y][z];
  func(arr2, <list of parameters>);
  return 0;
}

答案 1 :(得分:0)

代码中的问题很少:

首先,func函数应返回int***指针。它被定义为返回int,它不是您实际返回的类型。 其次,为什么要从arr重新调整全局func数组?它只是修改全局数组。

int arr[x][y][z];
int func(list of parameters)
{
  //code
  return arr;
}

第三,为什么声明arr2来保存结果 - 只需引用你定义的全局数组。

第四,不支持全局定义int arr[x][y][z]; - 编译器不知道如何创建这个缓冲区 - 你应该用数组的实际大小声明它(例如,int arr[10][10][10];

答案 2 :(得分:0)

如果在函数外声明它或者在函数内声明它然后处理悬空指针,则将数组作为参数传递给函数 例如 -

char*func()
{
   char str[10];
   strcpy(str,"Hello!");
   return(str); 
}
//returned pointer points to str which has gone out of scope. 

或者您可能正在使用正在释放的内存,例如

int *c = malloc(sizeof(int));
free(c);
*c = 3; //writing to freed location!