从C中的函数返回整数数组而不使用静态[duplicate]

问题描述 投票:-3回答:1

这个问题在这里已有答案:

可以从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;
}
c
1个回答
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;
}

并且不要忘记释放分配的内存

© www.soinside.com 2019 - 2024. All rights reserved.