Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

Как заполнить один int пустой массив другим int массивом ? - C++
Можно пример кода :)

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

Как в выделенную память записать поочередно число int, массив char[n], и еще число int - C++
Выделяю память void* Start=malloc(Size); Как туда записать поочередно число int, массив char, и еще число int?

Создать перегруженную функцию mas(), выводящую одномерный статический числовой массив - C++
Может кто помочь пожалуйста, надо создать функцию mas(), которая выводит одномерный статический числовой массив объектов, символьный массив...

Как перевести массив строк в массив int - C++
for (int i=0; i<str.size(); i++) { str=static_cast<int>(str); } есть vector <string> str; Оно не...

6
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
23.05.2013, 10:23 #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))
1
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
23.05.2013, 12:45  [ТС] #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))
Спасибо,но не могли бы вы словами пояснить,как работает этот принцип...И что вообще значит рассчитать смещение в байтах.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.05.2013, 13:09 #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] ... и т.д.
На этом основании и можно рассчитать смещение вручную.
1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
23.05.2013, 13:16 #5
Цитата Сообщение от КенТюРиК Посмотреть сообщение
Спасибо,но не могли бы вы словами пояснить,как работает этот принцип...
Попробую
Во-первых, имя массива (здесь mas) почти во всех случаях неявно преобразуется в указатель на первый элемент.
Во-вторых, элементы массива расположены последовательно друг за другом, в одном куске памяти. Например, имея массив c именем array из элементов типа int, чтобы получить 2-й элемент массива array надо от начала массива сдвинуться 2 * (размер элемента) байт, т.е. 2 * sizeof (*array) ~ 2 * sizeof (int). Т.е. прибавляем к адресу первого элемента смещение и разыменовываем.
Теперь примени всё это рекурсивно к трёхмерному массиву, и получишь то, что я писал.

Не по теме:

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

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

Добавлено через 1 час 35 минут
ап...
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
27.05.2013, 09:46 #7
Цитата Сообщение от КенТюРиК Посмотреть сообщение
А что нужно выводить чтобы увидеть результат:количество байт.
Приводил ранее код:
Цитата Сообщение от Tulosba Посмотреть сообщение
C++
1
(&mas[1][2][3] - &mas[0][0][0])*sizeof(int)
Разница между эл-ми (по сути - кол-во), умноженное на размер элемента.
0
27.05.2013, 09:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2013, 09:46
Привет! Вот еще темы с ответами:

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

Как понять int a(int x,int y, int z)? - C++
какое значение будет у переменной а?

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec - C++
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...

Как переделать динамический массив int в char? - C++
Как переделать динамический массив int в char? #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstdio&gt; #include &lt;iomanip&gt; ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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