你如何解释*(y_ptr)和价值;

How do you explain *(y_ptr)&val;

本文关键字:ptr 何解释 解释      更新时间:2023-10-16

问题描述

在下面的例子中,我写了*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的数字都保持不变。

表达式的作用很简单:它解引用指向valy_ptr,并将结果与相同的val进行位处理。

注意:您需要将x_ptr初始化为某个位置,以避免由于解引用未初始化的指针而导致潜在的崩溃。

这是一个非常尴尬的间隔和括号的方式来做按位&。更清楚:

*x_ptr = *y_ptr & val;

虽然x_ptr是未初始化的,所以这是UB。

你编辑的代码是一个错误,因为你试图将int分配给int*,正如你的编译器明确指出的那样。这显然是无效的。