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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
#1

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

23.05.2013, 10:10. Просмотров 468. Ответов 6
Метки нет (Все метки)

Обьявлен массив int mas[2][3][5] Обьяснить как осуществляется доступ и расчитать смещение в байтах к элементу mas [1][2][3].

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

Но не пойму:как расчитать смещение в байтах.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2013, 10:10     Обьявлен массив int mas[2][3][5] Обьяснить как осуществляется доступ
Посмотрите здесь:

C++ Написать и протестировать функцию shift_l(mas,n,k), которая циклически сдвигает массив длины n влево на k позиций.
C++ Как массив char[4] в int ?
Как понять int a(int x,int y, int z)? C++
C++ Как перевести массив строк в массив int
Как заполнить один int пустой массив другим int массивом ? C++
C++ Как забить в массив типа int инфу из файла?
C++ Как преобразовать строку char в массив int?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 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
:)
Эксперт С++
4390 / 3233 / 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!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 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++ Как считать из файла в массив типа int
C++ Как конвертировать массив int в int?
Как считать данные в vector<pair<int, pair<int, int>>> arr(m) ? C++
Как переделать динамический массив int в char? C++
из заданного одномерного массива mas[N] формирует новый массив mas из полусумм двух соседних элементов исходно C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4390 / 3233 / 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] Обьяснить как осуществляется доступ
Ответ Создать тему
Опции темы

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