为"adjacent"变量赋值时出现问题

Problem assigning a value to an "adjacent" variable

本文关键字:问题 赋值 adjacent 变量      更新时间:2023-10-16

在这段代码中,我首先描述了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;
}

so(&b-1(表示&

不,C++不是这样工作的。

你不能像这样"导航"堆栈框架,因为C++是一个抽象,没有堆栈框架。

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

为什么会这样?

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

是的,它真的很在乎这种事!

您的问题基于错误前提

[…](&b-1(指的是&一个[…]

这是错误的。所以当你。。。

*(&b - 1) = 3;

您正在取消引用一个不允许取消引用的指针。在(&b - 1)处没有存储double。由于这是未定义的行为,您的程序可以做任何事情,这与您的代码所能说的差不多;(。