c - 从c中的函数返回指针

标签 c

以下代码有什么问题

#include<stdio.h>

int main()
{
    int *a=pointer_return();

}

int* pointer_return()
{
     int a=10;
    return &a;
}

它给了我错误

demo.c: In function ‘main’:
demo.c:5:9: warning: initialization makes pointer from integer without a cast [enabled by default]
demo.c: At top level:
demo.c:9:6: error: conflicting types for ‘pointer_return’
demo.c:5:9: note: previous implicit declaration of ‘pointer_return’ was here

最佳答案

实际发生错误是因为您在尝试使用它之后声明了pointer_return。所以当你引用它时,C编译器不知道它是什么。如果更改顺序,则编译器可以理解 int *a... 声明中对 pointer_return 的引用:

int* pointer_return()
{
     int a=10;
    return &a;
}

int main()
{
    int *a=pointer_return();
}

或通过以下方式解决:

int* pointer_return();

int main()
{
    int *a=pointer_return();
}

int* pointer_return()
{
    int a=10;
    return &a;
}

错误将会消失,但正如每个人都指出的那样,您仍然会收到有关返回局部变量地址的警告。如果稍后取消引用返回值,则返回局部变量的地址将导致未定义的行为。

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

相关文章:

c - 错误: used struct type value where scalar is required for(;*ptr;ptr++)

c - 在函数内部使用变量未声明错误

c - 宏内部工作

c - 设备驱动程序和轮询中的中断处理

c - 该行的指针解释宏

c - 这段代码如何高精度地计算圆周率?

c - 在有或没有 UNICODE 支持的情况下,如何在我的程序中使用 _stprintf?

c - C 中的#ifndef 被忽略了吗?

C 字符无缘无故地加起来

检查字符串是否匹配特定格式