![]() |
|
Модераторы: bsa |
![]()
|
|
| Recev |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 18.10.2010 Репутация: нет Всего: нет |
Решение:
Спасибо всем, кто помог. |
|||
|
||||
| Чoо |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
Recev, с массивом просто работать, я ж писал выше.
Начнем с одномерного массива. Что он представляет собой? Да, правильно, указатель на первый элемент массива. Что из этого означает? а то, что что бы обратиться к первому элементу, достаточно знать только его адрес, все остальные элементы следуют в памяти друг за другом. Что бы обратиться ко второму, надо прибавить к адресу первого элемента, столько байт, сколько занимает один элемент этого массива. Если хотим обратиться ко третьему элементу, то нужно прибавлять столько, сколько занимают два элемента. Поскольку массив - указатель, то что бы получить значение без оператора [], указатель надо разыменовывать (оператор разыменвоания "*"). Таким образом:
<=> - так обозначил эквивалентность операций. что же представляет собой двумерный массив? Двумерный массив же представляет собой указатель на указатель, то есть при объявлении int m[3][4] выделяется память для 3-х одномерных массивов, содержащих в себе по 4 указателя на элементы типа int . Может коряво сказал, но по-другому объяснить что-то ни как не получается. Из этого следует, что что бы обратиться к первому элементу первого одномерного массива (назовем это строкой), надо вычислить адрес строки и прибавить к ней номер элемента. Адрес строки определяется из указателя на первый элемент + номер нужной строки. Это будет выглядеть так:
Вернемся к нашему массиву: mas[i1*j+j1] Этот массив хранит в себе не целые числа, а только указатели на целые числа, поэтому, если мы выделили память для этих чисел, то обращаться к нему нужно всегда используя оператор разыменования:
вот так правильно А вообще, пока я это писал, я понял, что по сути мы объявили одномерный массив, который двумерным даже не пахнет. Объяснение - выше Двумерный массив будет выглядеть так: int ***a; //тобишь указатель на (указатель на указатель) Вот предыдущий класс с именно "двумерным массивом":
в этом случае им можно будет пользоваться и как обычноым двумерным массивом. Добавлено через 6 минут и 43 секунды если объяснить "на пальцах", то статический двумерный массив состоит из указателей на указатели, разыменовав которые, мы получим:
соответственно и объявление динамического массива выглядит как int ***a; Добавлено через 8 минут и 59 секунд долго я печатал: пока писал, автор уже и справился вроде -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
||||||||||
|
|||||||||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |