繁体   English   中英

*((int *)(&val)+1)是什么意思

[英]What does this mean *((int*)(&val) +1)

我试图理解这一行代码。 有人能帮我吗? 是否将结果保存在变量val或变量val的地址中?

*((int*)(&val) +1)= A*(y) + (B - C)

谢谢

&valval地址
(int*)(&val)将此地址视为指向int的指针
(int*)(&val) +1将该地址加1(乘以sizeof(int)倍数)
*((int*)(&val) +1) = ...在此递增地址处分配右侧值

它将val解释为好像是整数数组,并将右手表达式的结果存储在其第二个元素中。 为了确切地理解所有内容,您应该提供更多上下文(我的猜测:它是在操纵double值的原始内容吗?)

请注意,由于严格的别名规则,根据val的类型,这可能是未定义的行为。

将表达式*((int*)(&val) +1)分成较小的表达式以了解它:

  1. 接受val&val)地址,并将其作为指向int (int *)的指针
  2. 向此指针添加1 +1 ,这意味着“将指针移动到下一个int”,因为它是一个int数组。
  3. 通过组合*=最终确定将右侧表达式应用于指针所指向的int

希望其他人回答了您的问题。 除了其他人所说的,相同的代码可以编写如下:

(int*)(&val)[1]= A*(y) + (B - C)

其中(int *)将类型转换&val作为指向整数的隐式指针,该整数指向val的地址,[1]指示存储val的位置之前的第一个整数位置。

这就是数组的解释方式。 说你有一个数组

int a[10];

对于此数组, “ a”是一个指向基地址(元素a [0]的地址)的指针,而a [i]除了*(a + i)就是什么,即位于i前面的元素数组的第一个元素。

这是不正确的代码,您永远不要使用它

想象一下这堂课:

class A {
    int number = 10;
    public:
    void print(){ std::cout << number; }
};

int number专用于访问,不能使用!

那么我们如何访问这个私有的int

只是:

A obj;
*( (int*) ( &obj ) ) = 100;
obj.print();

输出

100


演示

现在,如果您将有多个数据,那么如何访问?

通过这种语法:
*((int*)(&val) +1)

它说:
找到第一个数据的地址,
一个指标继续前进,
将其转换为int*
然后取消引用
然后初始化

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM