Указатель разыменования C ++. Почему это меняется? - PullRequest
0 голосов
/ 03 ноября 2018

У меня возникли проблемы с пониманием того, почему размещение * за скобками приводит к изменению значения. Я понимаю, почему 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 голосов
/ 03 ноября 2018

При работе с большим количеством умножений и скобок в подобных задачах важно учитывать приоритет операторов. Причина, по которой он выводит 3, в том, что ваша программа читает

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

как

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

Таким образом, вы можете видеть, что здесь разыменовывается вся вещь, а не просто (x[0][0])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...