可以在不使用静态的情况下从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;
}
答案 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;
}
别忘了释放分配的内存