C - 函数返回一个数组

pat*_*atz 3 c arrays methods

我正在编写一个接收数字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;
 }
Run Code Online (Sandbox Code Playgroud)

这些是编译器返回的错误

arrays1.c:在函数'makea'中:
arrays1.c:12:错误:void值不被忽略,因为它应该是
arrays1.c:14:warning:return使用指针生成整数而不使用
强制转换array1.c:14:warning :function返回局部变量的地址

我认为这是指针的问题......但我不太确定

Ric*_*III 6

一些问题:

  1. 您的数组在堆栈上分配,这意味着当您的函数退出时,您返回的内存将无效
  2. 在C中,您不能从函数返回数组,它必须首先衰减成指针.

因此,要修复,请使用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;
}
Run Code Online (Sandbox Code Playgroud)

另请注意,使用malloc 有时基本上可以免费授予您"随机数"场景,从而无需循环遍历元素,因为从malloc返回的值是垃圾(因此是随机数).

但是,请注意malloc是特定于实现的,这意味着实现理论上可以在返回之前为您清除内存.