C ++解除引用指针。为什么会改变?

时间:2018-11-03 03:47:28

标签: c++ pointers

我有点难以理解为什么将*放在括号之外最终会改变值。我知道为什么打印2,但是我不明白为什么打印3。任何帮助,将不胜感激,谢谢。

int main()
{
     //delcaring typedef of boxes
     typedef int boxes[2][2];

     //delcaring variables that are going to be placed into the boxes
     int a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8;

     //declaring two boxes variables and storing variables
     boxes myBox={{a,b},{c,d}};
     boxes myBox2={{e,f},{g,h}};

     //placing those boxes into a pointer boxes array
     boxes *x[2][2]={{&myBox,&myBox2,},{&myBox,&myBox2}};

    //testing code
    cout<<(*x[0][0])[0][1]<<endl;  //prints out 2
    cout<<*(x[0][0])[0][1]<<endl;  //prints out 3

}

1 个答案:

答案 0 :(得分:0)

在此类问题中使用大量乘法和括号时,请务必考虑运算符的优先级。输出3的原因是因为您的程序读取

*(x[0][0])[0][1]

*((x[0][0])[0][1])

因此,您可以看到它在取消引用整个内容,而不仅仅是(x[0][0])