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

时间:2013-10-22 15:21:07

标签: 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;
}

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

为什么我收到此错误?

1 个答案:

答案 0 :(得分:7)

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

通过将func()移至 main()上方的进行修复,以便在调用之前看到定义,或在main()之前引入原型:

int * func();

此外,不带参数的函数应该是C中的(void)please don't cast the return value of malloc() in C