gpt4 book ai didi

c - 函数局部变量的 return 如何工作?

转载 作者:行者123 更新时间:2023-12-04 01:05:31 24 4
gpt4 key购买 nike

<分区>

我对局部变量的 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

现在,这个方法如何返回局部变量的地址并打印出它的正确值,尽管变量应该超出范围/在函数返回后被销毁?

请解释这三种情况下的方法是如何工作的。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com