以下代码有什么问题
#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/