[英]What does this mean *((int*)(&val) +1)
我试图理解这一行代码。 有人能帮我吗? 是否将结果保存在变量val或变量val的地址中?
*((int*)(&val) +1)= A*(y) + (B - C)
谢谢
&val
取val
地址
(int*)(&val)
将此地址视为指向int
的指针
(int*)(&val) +1
将该地址加1(乘以sizeof(int)
倍数)
*((int*)(&val) +1) = ...
在此递增地址处分配右侧值
它将val
解释为好像是整数数组,并将右手表达式的结果存储在其第二个元素中。 为了确切地理解所有内容,您应该提供更多上下文(我的猜测:它是在操纵double
值的原始内容吗?)
请注意,由于严格的别名规则,根据val
的类型,这可能是未定义的行为。
将表达式*((int*)(&val) +1)
分成较小的表达式以了解它:
val
( &val)
地址,并将其作为指向int (int *)
的指针 +1
,这意味着“将指针移动到下一个int”,因为它是一个int数组。 *
和=
最终确定将右侧表达式应用于指针所指向的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.