你如何解释*(y_ptr)和价值;
How do you explain *(y_ptr)&val;
问题描述
在下面的例子中,我写了*x_ptr = *(y_ptr)&val;
,我不明白为什么输出是10
。记忆里发生了什么?我不明白这个组合。
// Example program
#include <iostream>
#include <string>
int main()
{
int *x_ptr, *y_ptr;
int val = 10;
y_ptr = &val;
*x_ptr = *(y_ptr)&val;
std::cout << *x_ptr << std::endl;
}
假设我将*x_ptr = *(y_ptr)&val
更改为x_ptr = *(y_ptr)&val
,编译器会给出以下错误,为什么?
10:20: error: invalid conversion from 'int' to 'int*' [-fpermissive]
输出为10
,因为任何与自身进行bit-AND-ed的数字都保持不变。
表达式的作用很简单:它解引用指向val
的y_ptr
,并将结果与相同的val
进行位处理。
注意:您需要将x_ptr
初始化为某个位置,以避免由于解引用未初始化的指针而导致潜在的崩溃。
这是一个非常尴尬的间隔和括号的方式来做按位&
。更清楚:
*x_ptr = *y_ptr & val;
虽然x_ptr
是未初始化的,所以这是UB。
你编辑的代码是一个错误,因为你试图将int
分配给int*
,正如你的编译器明确指出的那样。这显然是无效的。
相关文章:
- 请解释"函数1(p1,p2,p3);"的输出
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 被解释为低级别const的const对象的地址
- 计算每个节点的树高,帮助我解释这个代码解决方案
- MSVC将仅移动结构参数解释为指针
- Python中的for循环与C++有何不同
- 内联程序集printf将整数解释为地址
- CLANG 编译器 说:变量"PTR"可能未初始化
- 有人能解释一下为什么下界是这样工作的吗C++的
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 有人能为我解释一下C++代码吗
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 你能解释一下什么运行时错误是如何解决它的吗?
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 有人可以向我解释为什么控制台输出 0 吗?
- 有人可以解释一下这段代码如何能够反转字符串
- 在C++中释放内存期间,迭代器与指针有何不同