变量地址生命周期的一个问题
来源:互联网 发布:win7网络发现无法启用 编辑:程序博客网 时间:2024/06/06 02:41
面试时经常会考到这样一道改错题:
#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的存储区域,因此这块存储区域存什么,那是系统的事情,我们就不得而知了。有关变量的作用域的详细情况,一般的教材都会讲到,读者可以参考相关教材。
0 0
- 变量地址生命周期的一个问题
- 一个引用相关问题,延长临时变量的生命周期
- vbscript变量的生命周期问题
- 定义一个地址固定的变量
- 关于Js变量地址引用的问题
- 寄存器变量取地址的问题
- 一个静态变量的问题
- 一个绑定变量的问题
- 变量是一个地址,代表一个可用的内存空间
- 变量存放地址问题
- 局部变量的生命周期
- java 变量的生命周期
- 注意变量的生命周期
- c变量的生命周期
- 变量的生命周期
- 36-变量的生命周期
- 变量的生命周期
- 变量的生命周期
- 一个内存不能被written的问题
- HTML5.1 里的新东西
- API常用类的概述
- Unity学习笔记(一):基础入门
- [CSAPP] 优化程序性能(一)
- 变量地址生命周期的一个问题
- 【JAVA】3.使用eclipse编写JAVA程序
- ogg-00869的一个乌龙事件
- 学学Java反射
- thinkphp连接sybase数据库
- Scanner类概述及其构造方法
- Mybatis中的延时加载
- MTK 65XX系列通过USB OTG添加Ethernet RJ45有线网卡支持
- Linux_Hi3518E开发_制作根文件系统镜像