我对本地变量的 return
,以及使用指针返回地址和变量地址感到困惑。
首先:
#include <stdio.h>
int returner(void);
int main(void)
{
printf("The value I got is = %d\n", returner());
return 0;
}
int returner(void)
{
int a = 10;
return a;
}
输出:
The value I got is = 10
即使函数返回后,局部变量应该被释放,但它仍然被返回了。这是怎么回事?
第二点:
#include <stdio.h>
int *returner(void);
int main(void)
{
int *pointer = returner();
printf("The value I got is = %d\n", *pointer);
return 0;
}
int *returner(void)
{
int a = 10;
return &a;
}
输出:
Test.c: In function 'returner':
Test.c:15:12: warning: function returns address of local variable [-Wreturn-local-addr]
15 | return &a;
为什么地址没有返回,即使像第一个示例中返回值一样? 第三条:
#include <stdio.h>
int *returner(void);
int main(void)
{
int *pointer = returner();
printf("The value I got is = %d\n", *pointer);
return 0;
}
int *returner(void)
{
int a = 10;
int *ptr = &a;
return ptr;
}
输出:
The value I got is = 10
现在,这个方法是如何返回局部变量的地址并打印它的正确值的,即使变量应该在函数返回后超出范围/被销毁?
请解释一下这三种情况下方法是如何工作的。
int a
->static int a
- alex01011static
需要完全理解它的作用。我不会在上下文中轻易提出这样的建议。 - Eugene Sh.