c - C 中的函数和指针

标签 c function pointers

我试图将一个函数的返回值赋给变量,问题是这个返回值是一个数组,我知道它会返回一个指针,但是正如你在下面看到的,我就是做不到适当的分配,我看了很多问题,但似乎没有得到我需要的。所以这是我的功能:

int randn(int n, int l){
    int r[n];
    int i;
    for ( i=0; i<n; i++){
        r[i]=rand() % l;
        r[i]++;
        }
    return *r;
}

我相信这个功能没问题,但是当我尝试这样做时 int *o; o=randn(n,l); 我收到这个警告:

warning: assignment makes pointer from integer without a cast [enabled by default]

当我执行它时,出现段错误。 这可能是一个愚蠢的问题,但我已经尝试解决这个问题很长时间了。我会很感激一些帮助。 提前谢谢你。

最佳答案

这不是从函数指向指针的正确方法。此外,r局部变量,其生命周期仅限于函数。使用 malloc 分配内存并返回它:

int* randn(int n, int l){
    int *r=malloc(n * sizeof *r);
    if(!r) { */ error */}
    int i;
    for ( i=0; i<n; i++){
        r[i]=rand() % l;
        r[i]++;
        }
    return r;
}

请注意,我还更改了签名以返回一个指针 (int*)。调用方负责free()内存。

关于c - C 中的函数和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30958274/

相关文章:

c - 在 C 中的字符串文字中禁止使用

c - 为什么要在函数 strtod() 中使用 (char **endptr) 而不是 (char ch) 或 (char *chptr)

c - 我是否需要将 ascii 转换为 uint8_t 以通过 uart(腻子)写入和显示

c - 指针增加 1,2,3 或在数组中后增加

c++ - C++非指针数据成员在指针类实例中的分配是在堆上还是在栈上

c - 如何找出库中缺少的函数,但哪些函数存在于与库一起发布的公开头文件中?

c - gcc 禁用几行代码的所有警告

javascript - 这个 Node.js 代码似乎替换了同一函数中的函数实现,它有什么作用?

c - 将数组元素归零的函数

c++ - 可以在纯 C++ 中使用指针吗?