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

时间:2017-01-29 06:22:52

标签: c++ pointers

我正在尝试理解这行代码。有人能帮我吗?它是将结果保存在变量val还是变量val的地址中?

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

谢谢

5 个答案:

答案 0 :(得分:9)

val(int*)(&val)的地址 int将此地址视为指向(int*)(&val) +1的指针 sizeof(int)将此地址增加1(次*((int*)(&val) +1) = ...
public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int correctAnswers = 0; /*This a is called a Do-While loop and will execute the code inside once *before checking the boolean statement */ do{ System.out.println("What is your name?"); //Line A String name = scan.nextLine(); System.out.println("Entered name: " + name + "\n"); //Removed printing empty line and replaced with new line character switch (name){ case "Sam": System.out.println("aaa"); correctAnswers++; break; // From here it repeats back to line A case "Michael": System.out.println("bbb!"); correctAnswers++; break; // From here it repeats back to line A case "Arnold": System.out.println("ccc!"); correctAnswers++; break; // From here it repeats back to line A default: System.out.println("Try again!"); } } while (correctAnswers < 3); System.out.println("Thank you"); } } 在此递增的地址

分配右侧值

答案 1 :(得分:3)

它将val解释为整数数组,并将右手表达式的结果存储在其第二个元素中。要准确理解它的全部内容,你应该提供更多的上下文(我的猜测:它是否操纵double值的原始内容?)

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

答案 2 :(得分:2)

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

  1. 获取val的地址(&val)并将其视为指向int (int *)的指针
  2. 将1 +1添加到此指针,这意味着将指针移动到下一个int&#39;因为它是一系列的整数。
  3. 最后将*=合并,将右侧表达式应用于指针指向的int

答案 3 :(得分:1)

我希望其他人回答你的问题。添加其他人所说的,相同的代码可以写成如下:

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

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

这是解释数组的方式。假设你有一个数组

int a[10];

对于这个数组,'a'是指向基地址(元素a [0]的地址)的指针, a [i] 是除了 *(a + i)之外什么都没有,即i元素位于数组第一个元素之前的位置。

答案 4 :(得分:0)

这不是正确的代码,你永远不应该使用它

想象一下这个课程:

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

int number是私有的访问不使用!

那么我们如何才能访问此私有int

简单地说:

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

<强>输出

100

demo

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

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

它说:
找到第一个数据的地址,
一个指标继续,
把它投到int*
然后取消引用它,
然后初始化它