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

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

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

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

23.05.2013, 10:10. Просмотров 478. Ответов 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] Обьяснить как осуществляется доступ
Посмотрите здесь:

из заданного одномерного массива mas[N] формирует новый массив mas из полусумм двух соседних элементов исходно - C++
из заданного одномерного массива mas формирует новый массив mas из полусумм двух соседних элементов исходного массива/ Программа не...

Как конвертировать массив int в int? - C++
Есть массив целых чисел, как из всех этих чисел получить одно единственное? int myints = {7, 4, 5, 3, 0}; int a; //Хочу чтобы a =...

Написать и протестировать функцию shift_l(mas,n,k), которая циклически сдвигает массив длины n влево на k позиций. - C++
Помогите ребят!!!!препод задачи задачи для аттестации,сделал фактически все,кроме этой: Написать и протестировать функцию...

Как считать из файла в массив типа int - C++
Подскажите как считать из файла в массив nbgf, если есть разделитель | ifstream loader("temp.txt"); if (loader.is_open()){ char...

Как забить в массив типа int инфу из файла? - C++
надо с файла 1.тхт по символу (они через пробел) забить в массив mas. вот как делал : ifstream f("D:\\1.txt"); for(int r=0;i<10;i++) ...

Как обьяснить формулы в коде - C++
#include <iostream> #include <math.h> using namespace std; int main () { float a, b, c , B , A; const float pi=3.14; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
1446 / 1175 / 61
Регистрация: 21.04.2012
Сообщений: 2,463
Завершенные тесты: 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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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!
1446 / 1175 / 61
Регистрация: 21.04.2012
Сообщений: 2,463
Завершенные тесты: 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 vs int fast - как проверить производительность? - C++
Как проверить производительность обычного int и int fast? Существуют ли ещё какие-то "быстрые типы"?

Как осуществляется поиск символа в строке? - C++
Объясните пожалуйста как осуществляется поиск символа в строке?алгоритм какой ?

В каком случае надо начинать с int main() или с int _tmain( int argc, _TCHAR* argv[] ) и т.д.? - C++
Не понимаю, с чего начинать. Заранее спс.


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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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] Обьяснить как осуществляется доступ
Ответ Создать тему
Опции темы

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