Member 13100982 Ответов: 3

Может ли кто-нибудь объяснить мне, как выход равен 16


int arr[2][3][2]={{{2,4},{7,8},{3,4},}, {{2,2},{2,3},{3,4}, }};
printf(" %d",**(*arr+1)+2+7);

Что я уже пробовал:

Я пытался,но не смог. Может ли кто-нибудь проинструктировать его. Ответ 16

ZurdoDev

Следуйте указателям.

3 Ответов

Рейтинг:
8

Member 13108360

Следуйте указателям.....

Легко понять, попробовать

int i=**(*arr+1);
printf ("%d", i+2+7);


Рейтинг:
23

Rick York

Я думаю, что будет лучше, если вы сами разберетесь в этом, но я дам вам подсказку. Во-первых, подумайте об этом как о математической задаче :

16 = * * (*arr+1)+2+7

Вы можете вычесть 9 с обеих сторон и получить :

16-9 = * * (*arr+1)+2+7-9
7 = **(*arr+1)

Это означает, что выражение приводит к значению 7, и вы можете видеть, где находится 7 в массиве. Следующий вопрос: как это выражение приводит к 7?

Из объявления вы можете видеть, что это трехмерный массив. Звездочки в этом контексте являются разыменованиями указателей, а массивы по существу являются указателями, когда с ними не используются скобки.

Еще одна вещь, это может помочь переписать объявление и выражение инициализации, чтобы лучше проиллюстрировать организацию.

int arr[2][3][2]=
{
   { // 1st dim [0]
       {  // 2nd dim [0]
          2,  // 3rd dim [0], item [0][0][0]
          4   // 3rd dim [1], item [0][0][1]
       },
       {  // 2nd dim [1]
          7,  // 3rd dim [0], item [0][1][0]
          8   // 3rd dim [1], item [0][1][1]
       },
       {  // 2nd dim [2]
          3,  // 3rd dim [0], item [0][2][0]
          4   // 3rd dim [1], item [0][2][1]
       },
   },
   {{2,2},{2,3},{3,4}, }
};


На данный момент я надеюсь, что у вас есть достаточно, чтобы экстраполировать ответ.


Member 13100982

Спасибо за инструктаж. Мне нужно, как **(*arr+1) обозначает {0 1 0}. Не могли бы вы пожалуйста помочь мне

Рейтинг:
1

CPallini

Это арифметика указателей.
Предполагая, что у вас есть 64-битная машина и int имеют длину 4 байта:
*arr тип есть указатель на указатель на int. На 64-битной машине добавление 1 увеличивает его на 8 байты. С другой стороны, int имеет длину 4 байта, поэтому он перескакивает на третье целое число массива.