从C中的函数返回整数数组,而无需使用静态

时间:2018-07-10 09:18:21

标签: c

可以在不使用静态的情况下从C中的函数返回数组吗?

int *func(int n)
{
  int d[100];
  int i=0,a;
  while(n!=0)
  {
    a=n%2;
    d[i]=a;
    n=n/2;
    i++;
  }
  return d;
}

1 个答案:

答案 0 :(得分:1)

退出函数后,将无法再返回在堆栈上本地创建的数组,该数组不再有效。您需要使用静态数组[100]或指针并为其分配malloc内存

int *func(int n)
{
  static int d[100];
  int i=0,a;
  while(n!=0)
  {
    a=n%2;
    d[i]=a;
    n=n/2;
    i++;
  }
  return d;
}

UPDT:

d的创建具有自动存储期限,并且一旦离开声明范围(即函数返回),对其的引用将无效。

static存储区指示编译器在程序生存期内保留局部变量,而不是在每次进入和超出范围时都创建和销毁它。

您还可以在函数内部使用动态分配内存。

int *func(int n)
{
  int *d = malloc(sizeof(int) * (100));
  int i=0,a;
  while(n!=0)
  {
    a=n%2;
    d[i]=a;
    n=n/2;
    i++;
  }
  return d;
}

别忘了释放分配的内存