数据的存储与覆盖问题

下图为源代码:
进行如下操作并获取结果:
分别输入0,1,2,3,4,5,6几个参数
输入0-1时,结果任为3.14取十位小数
输入2时,结果为3.13999865
输入3时,结果为2.0取十位小数
输入4-5时,结果与输入0-1时相同
输入6时,程序报错
原因分析:
此时,浮点数d存储在形式上的a[2],a[3]上
因此,改变a[0],a[1]并不改变d的值
当改变a[2],a[3]时会改变d的值,而a[3]存储的是d的高32位,因此改变a[3]的值对结果的影响更大
而改变a[4],a[5]时,虽然已经越界,但是由于栈自动分配的越界保护内存,故而不报错,结果 也不发生改变
输入6时,程序超过保护内存,程序越界
数据的存储与覆盖问题_第1张图片

你可能感兴趣的:(数据的存储与覆盖问题)