3
#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;
}

错误:函数类型冲突。警告:赋值使指针从整数不进行强制转换[默认启用]

为什么我会收到此错误?

4

1 回答 1

7

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

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

int * func();

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

于 2013-10-22T15:22:34.267 回答