为"adjacent"变量赋值时出现问题
Problem assigning a value to an "adjacent" variable
在这段代码中,我首先描述了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
。由于这是未定义的行为,您的程序可以做任何事情,这与您的代码所能说的差不多;(。
相关文章:
- 为"adjacent"变量赋值时出现问题
- 关于 c++ 函数中指针赋值的简单问题
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- C++:关于使用 Stroustrup 示例移动构造函数/赋值的问题
- c++问题:给一个变量赋值后,另一个变量发生了变化
- 复制和赋值构造函数的问题
- 类模板的用户定义赋值运算符时遇到问题
- template_back和move赋值构造函数存在问题
- 赋值重载:为什么使用相同的对象会导致程序中出现问题
- C++赋值重载自赋值问题
- 重载赋值运算符的问题
- 交换与使用std::map[]运算符赋值(const问题)
- C++中赋值运算符和 c 字符串的问题
- 在C++中重载赋值运算符时出现问题
- 我在 c++ 中的赋值重载运算符有什么问题?(包括详细信息)
- C++ 向量构造函数和赋值问题
- "无符号长整型"和'unsigned long long int'赋值问题
- 这个静态变量赋值给局部函数中的指针有什么问题
- 数组索引越界赋值的问题
- 动态分配结构数组:赋值问题(c++)