vc++6.0编译器按照内存地址递减的方式来给变量分配内存
来源:互联网 发布:简易电路设计软件 编辑:程序博客网 时间:2024/06/13 11:33
在看c陷阱与缺陷时,有这么一段代码:
int i;int a[5];for(i = 0; i <= 5; i++){a[i] = 0;}
(对源代码做了小小的改动,不影响操作)不明白为什么会陷入死循环。
为了做对比,我又写了一段代码。因为我想的是不是超出数组边界引发的死循环?
int i;int a[5];for(i = 0; i <= 5; i++){a[i] = i;}
结果程序没有陷入死循环,当时还想打印出a[5]的值,看看是不是等于5.现在明白了,打印出来的值其实是*(a+5)。关于陷入死循环c陷阱与缺陷(p46)中讲到编译器按照内存地址递减的方式来给变量分配内存,那么内存中数组a之后的一个字实际上是分配给了整形变量i.此时,i的值为10,循环体内将并不存在的a[10]设置为0,实际上却是将计数器i 的值设置为0,这就陷入了死循环。
另附一张图,看过会更清晰:
- vc++6.0编译器按照内存地址递减的方式来给变量分配内存
- 编译器对变量的内存分配方式
- 编译器对变量的内存分配方式 收藏
- C语言输出 编译器为变量分配的内存地址 %p
- C语言变量内存地址的分配
- C\C++编译器关于变量的内存分配顺序总结
- C\C++编译器关于变量的内存分配顺序总结
- C\C++编译器关于变量的内存分配顺序总结
- 对于结构体,什么时候分配内存以及为什么选择用malloc函数来分配结构体变量的地址
- 变量的内存分配
- 变量内存的分配
- 变量的内存分配
- 变量内存的分配
- 编译器分配内存的问题,内存对齐
- 内存的分配方式
- 内存的分配方式
- 内存分配的方式
- 内存的分配方式
- List集合知识总结
- 常用log4j配置
- 单例模式读取Properties文件
- Java中的流、字符流和字节流
- Could not open: \.android/avd/2.2.ini
- vc++6.0编译器按照内存地址递减的方式来给变量分配内存
- 用java计算:1-1/3+1/5-1/7+1/9-1/11+......的前10000项之和
- 第一次C程序设计上机报告
- eclipse maven插件在线安装
- Android 第三方ROM CyanogenMod 源码下载,编译,刷机
- lua 中文教程 notes.
- 蓦然回首,那些命令都在灯火阑珊处
- android 统计应用安装量
- WPF 获取屏幕长宽(分辨率)