变量地址生命周期的一个问题

本文通过一个典型的面试题目,探讨了变量生命周期的问题。程序试图返回局部变量的地址,但在函数结束后,该变量被销毁,导致返回的地址无法正常使用。

面试时经常会考到这样一道改错题:
#include <stdio.h> 
 
int* function(int parameter) 
{
int a = parameter;
a += 1;
printf("在fuction函数中,变量a的值是%d,  变量a的地址是%d\n", a, &a);
return &a; 
} 
 
int main() 
{
int parameter = 10; 
        int *p = function(parameter); 
printf("指针p的值是%d, p指向的值是%d\n", p, *p); 
    
return 0; 
} 

程序原意是在main函数中定义一个变量 parameter,将其传递到函数function中,将parameter赋值给变量a,将a的地址返回给main函数,在main函数再通过a的地址来访问a的值。先来看程序的运行结果:



从运行结果看出,变量a在function函数中的值是11,且地址是1244900。在main函数中,a的地址还是1244900,但是值却是4198508!
本道题错在没有正确理解变量的生命周期。 在function函数执行完后,变量a的生命周期也随之结束,即系统会回收a的存储区域,因此这块存储区域存什么,那是系统的事情,我们就不得而知了。有关变量的作用域的详细情况,一般的教材都会讲到,读者可以参考相关教材。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C语言答疑课堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值