将值分配给“相邻”变量时出现问题

时间:2018-11-05 16:07:47

标签: c++

在此代码中,我首先描述了int a并为其分配了值9,然后声明了另一个int b,然后给*(&b-1)赋予了值3,因此(&b-1)引用了&a然后我打印a的值,然后只打印9,但是当我在代码中添加新行(第6行)时,即先打印a,然后将值3分配给(&b-1),然后将a更新为3并打印它。那么为什么会这样呢?

#include <iostream>
using namespace std;
int main() {
    double a, b;
    a = 9;
    //cout<<&a<<" "<<a << endl ;
    *(&b - 1) = 3;
    cout << a << " " << &b - 1 << " ";
    cout << &a;
}

2 个答案:

答案 0 :(得分:4)

  

所以(&b-1)是指&a

不,那不是C ++的工作方式。

您不能像这样“导航”堆栈框架,因为C ++是一种抽象并且没有堆栈框架。

您在这里所做的是假装b是指向数组第二个(或更高版本)元素的指针,并尝试获取该数组中前一个元素的值。我们知道,您实际上没有数组。

  

那为什么会这样呢?

这就是原因。您对编译器撒谎了,现在它吓坏了。

是的,它确实在乎这种事情!

答案 1 :(得分:3)

您的问题基于错误的前提

  

[...](&b-1)表示&a [...]

那是错的。所以当你...

*(&b - 1) = 3;

您正在取消引用不允许取消引用的指针。 double上没有存储(&b - 1)。由于这是未定义的行为,因此您的程序可以执行任何操作,而关于代码的操作就可以说很多。)