我读到在函数中,局部变量被放在堆栈上,因为它们是在参数首先放在那里之后定义的。
这里也提到了这一点
5 .所有函数参数都放在堆栈上。6.函数内部的指令开始执行。7.局部变量在定义时被压入堆栈。
所以我希望如果 C++ 代码是这样的:
#include "stdafx.h"
#include <iostream>
int main()
{
int a = 555;
int b = 666;
int *p = &a;
std::cout << *(p+1);
return 0;
}
如果这里的整数有 4 个字节,并且我们调用包含int
555
x的前 8 位的堆栈上的内存空间,那么通过*(p+1)
我们应该查看地址x + 4处的内存,将另外 4 个字节“移动”到堆栈顶部。
但是,它的输出是-858993460
- 无论价值如何,它总是这样int b
。显然它的一些标准值。当然,我正在访问一个我不应该访问的内存,因为这是变量 b。这只是一个实验。
为什么我既没有得到预期值也没有得到非法访问错误?
我的假设哪里错了?
能-858993460
代表什么?