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

版权声明:本文为作者原创文章,转载时请注明文章来源,否则视为侵权,并按法律程序处理!

面试时经常会考到这样一道改错题:

#includeint* 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的值。先来看程序的运行结果:


变量地址生命周期的一个问题_第1张图片

从运行结果看出,变量a在function函数中的值是11,且地址是1244900。在main函数中,a的地址还是1244900,但是值却是4198508!

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

你可能感兴趣的:(变量地址生命周期的一个问题)