[英]C - function returns an array
我正在编写一个接收数字l的方法,并返回一个带有随机数的大小为l的向量。 我有这个代码,但不起作用
#include <time.h>
int makea (int z) {
int a1[z];
int i;
for (i = 0; i < tam; i++) {
a1[i]=srand(time(0));
}
return a1;
}
这些是编译器返回的错误
arrays1.c:在函数'makea'中:
arrays1.c:12:错误:void值不应该被忽略,因为它应该是
arrays1.c:14:warning:return在没有强制转换的情况下从指针生成整数
arrays1.c:14:warning:function返回局部变量的地址
我认为这是指针的问题......但我不太确定
一些问题:
因此,要修复,请使用malloc和指针:
int *makea (int z) {
int *a1 = malloc(sizeof(int) * z);
int i;
srand(time(NULL));
for (i = 0; i < tam; i++) {
a1[i]= rand();
}
// remember to free a1 when you are done!
return a1;
}
另请注意,使用malloc 有时基本上可以免费授予您“随机数”场景,从而无需循环遍历元素,因为从malloc返回的值是垃圾(因此是随机数)。
但是,请注意malloc是特定于实现的 ,这意味着实现理论上可以在返回之前为您清除内存。
你最好的选择是:
在例程之外声明数组,并将其传入以初始化它:
void init_array (int a[], nelms)
计划B传递一个指向指针的指针,并让例程分配并初始化它
像这样:
void alloc_and_init_array (int **a_pp, int nelms)
{
*a_pp = malloc (sizeof (int) * nelms);
...
......或者,等同地......
int *
alloc_and_init_array (int nelms)
{
int *a_p = malloc (sizeof (int) * nelms);
...
return a_p;
好吧,首先关闭你的函数说它返回一个int,但你想返回一个数组,所以这是错误的。 当然,你不能在C中返回数组......
其次,你必须返回一个指针。 您无法通过赋值复制数组或者在C中为数组分配新值,因此您的函数不会非常有用。 要么返回一个int*
要么将一个int**
作为输出参数并在函数中初始化它。
此外,您的数组是本地分配的,因此即使编译器没有抱怨您将返回无效的内存。
int makea (int size, int **out_array) {
int *temp, i;
if(!out_array)
return 0;
temp = malloc(sizeof(int) * size);
if(!temp)
return 0;
srand(time(0));
for (i = 0; i < size; ++i)
temp[i] = rand();
*out_array = temp;
return 1;
}
int main() {
int *arr;
if(!makea(10, &arr)) {
printf("Failed to allocate array");
return -1;
}
return 0
}
另一个说明:
temp[i] = srand(time(0));
那是错的。 srand
种子随机数生成器,但不返回随机数。 你调用srand
来输入种子,然后调用rand
来获得一个随机数。
像堆栈这样的局部变量在堆栈上分配。 在函数返回时,它将从堆栈中删除,因此返回的指针指向未分配的内存位置。
您必须使用malloc()分配数组或将已存在的数组传递给该函数。
#include <time.h>
int makea (int z) {
int *a1 = (int*)malloc(z*sizeof(int));
int i;
for (i = 0; i < tam; i++) {
a1[i]=srand(time(0));
}
return a1;
}
重要提示:当你不再需要时,请记得释放在外面某处分配的内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.