作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的示例中,我编写了 *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
,因为任何数字与自身的位与运算都保持不变。
表达式的作用很简单:它取消引用指向 val
的 y_ptr
,然后将结果与相同的 val
按位与运算.
注意:您需要将 x_ptr
初始化到某个位置,以避免因取消引用未初始化的指针而导致潜在的崩溃。
关于c++ - 你怎么解释 *(y_ptr)&val;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39502259/
问题描述 在下面的示例中,我编写了 *x_ptr = *(y_ptr)&val; 我不明白为什么输出是 10。内存中发生了什么?我无法理解这种组合。 // Example program #inclu
我是一名优秀的程序员,十分优秀!