Форум программистов, компьютерный форум CyberForum.ru

Обьявлен массив int mas[2][3][5] Обьяснить как осуществляется доступ - C++

Восстановить пароль Регистрация
 
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
23.05.2013, 10:10     Обьявлен массив int mas[2][3][5] Обьяснить как осуществляется доступ #1
Обьявлен массив int mas[2][3][5] Обьяснить как осуществляется доступ и расчитать смещение в байтах к элементу mas [1][2][3].

Вот так вот я осуществил доступ *(*(*(mas+2)+3)+5)

Но не пойму:как расчитать смещение в байтах.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
23.05.2013, 10:23     Обьявлен массив int mas[2][3][5] Обьяснить как осуществляется доступ #2
Можно это так представть
Код
mas[1][2][3]
~ *(*(*(mas + 1 * sizeof (*mas))      + 2 * sizeof (**mas))  + 3 * sizeof (***mas))
~ *(*(*(mas + 1 * sizeof (int[3][5])) + 2 * sizeof (int[5])) + 3 * sizeof (int))
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
23.05.2013, 12:45  [ТС]     Обьявлен массив int mas[2][3][5] Обьяснить как осуществляется доступ #3
Цитата Сообщение от gray_fox Посмотреть сообщение
Можно это так представть
Код
mas[1][2][3]
~ *(*(*(mas + 1 * sizeof (*mas))      + 2 * sizeof (**mas))  + 3 * sizeof (***mas))
~ *(*(*(mas + 1 * sizeof (int[3][5])) + 2 * sizeof (int[5])) + 3 * sizeof (int))
Спасибо,но не могли бы вы словами пояснить,как работает этот принцип...И что вообще значит рассчитать смещение в байтах.
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.05.2013, 13:09     Обьявлен массив int mas[2][3][5] Обьяснить как осуществляется доступ #4
Цитата Сообщение от КенТюРиК Посмотреть сообщение
И что вообще значит рассчитать смещение в байтах.
Расстояние между элементами mas[1][2][3] и mas[0][0][0].
Проверить можно так:
C++
1
(&mas[1][2][3] - &mas[0][0][0])*sizeof(int)
Цитата Сообщение от КенТюРиК Посмотреть сообщение
как работает этот принцип
Данные статического массива расположены в памяти последовательно:
Для конкретного примера: сначала идут элементы [0][0][0] ... [0][0][4], потом [0][1][0] ... [0][1][4] ... и т.д.
На этом основании и можно рассчитать смещение вручную.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
23.05.2013, 13:16     Обьявлен массив int mas[2][3][5] Обьяснить как осуществляется доступ #5
Цитата Сообщение от КенТюРиК Посмотреть сообщение
Спасибо,но не могли бы вы словами пояснить,как работает этот принцип...
Попробую
Во-первых, имя массива (здесь mas) почти во всех случаях неявно преобразуется в указатель на первый элемент.
Во-вторых, элементы массива расположены последовательно друг за другом, в одном куске памяти. Например, имея массив c именем array из элементов типа int, чтобы получить 2-й элемент массива array надо от начала массива сдвинуться 2 * (размер элемента) байт, т.е. 2 * sizeof (*array) ~ 2 * sizeof (int). Т.е. прибавляем к адресу первого элемента смещение и разыменовываем.
Теперь примени всё это рекурсивно к трёхмерному массиву, и получишь то, что я писал.

Не по теме:

в личку писать по этому поводу не стоит...

КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
23.05.2013, 19:46  [ТС]     Обьявлен массив int mas[2][3][5] Обьяснить как осуществляется доступ #6
А что нужно выводить чтобы увидеть результат:количество байт.

Добавлено через 1 час 35 минут
ап...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2013, 09:46     Обьявлен массив int mas[2][3][5] Обьяснить как осуществляется доступ
Еще ссылки по теме:

C++ Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec
Как заполнить один int пустой массив другим int массивом ? C++
C++ Как конвертировать массив int в int?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.05.2013, 09:46     Обьявлен массив int mas[2][3][5] Обьяснить как осуществляется доступ #7
Цитата Сообщение от КенТюРиК Посмотреть сообщение
А что нужно выводить чтобы увидеть результат:количество байт.
Приводил ранее код:
Цитата Сообщение от Tulosba Посмотреть сообщение
C++
1
(&mas[1][2][3] - &mas[0][0][0])*sizeof(int)
Разница между эл-ми (по сути - кол-во), умноженное на размер элемента.
Yandex
Объявления
27.05.2013, 09:46     Обьявлен массив int mas[2][3][5] Обьяснить как осуществляется доступ
Ответ Создать тему
Опции темы

Текущее время: 02:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru