编译时间C代码中的错误[从函数返回数组指针]

Nam*_*man 3 c pointers

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>

int main()
{
    int i, *ptr; 
    ptr = func();
    for(i=0;i<20;i++)
    {
        printf("%d", ptr[i]);
    }
    return 0;
}

int * func()
{
    int *pointer;
    pointer = (int*)malloc(sizeof(int)*20);
    int i;
    for(i=0;i<20;i++)
    {
        pointer[i] = i+1; 
    }
    return pointer;
}
Run Code Online (Sandbox Code Playgroud)

错误:func的冲突类型.警告:赋值使得指针来自整数而没有强制转换[默认情况下启用]

为什么我收到此错误?

unw*_*ind 7

因为你在func()没有先声明的情况下打电话.这会导致编译器假定它将返回int,但是然后将该整数存储在指针中,这当然是相当可疑的.

通过移动func()上面进行 修复main(),因此在调用之前可以看到定义,或者在之前引入原型main():

int * func();
Run Code Online (Sandbox Code Playgroud)

此外,不带参数的函数应该(void)在C中,请不要malloc()在C中转换返回值.