![]() |
|
Модераторы: bsa |
![]()
|
|
| Lorigin |
|
|||
|
Печатаю фото на холс Профиль Группа: Участник Сообщений: 29 Регистрация: 11.3.2008 Где: Москва Репутация: нет Всего: нет |
Ребята, помогите разобраться с передачей и работой динамического массива...
собственно застопорился как передать динамический массив в процедуру, чтобы его там заполнить... и как передать его чтобы прочитать (VvodMas,VivodMas), вся проблемма мне недоразобраться с * и & когда и что писать надо.... =\ читал уже 3 часа - в голове каша.. помогте пожалуйсто Это сообщение отредактировал(а) Lorigin - 8.11.2008, 23:01 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
|
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 1 Всего: 128 |
Lorigin, массив в Си - это указатель на некоторую область памяти, где начинаются элементы массива. Поэтому при передаче его в качестве параметра мы должны задать формальный параметр тоже как указатель. А количество - просто переменная, количество элементов, поэтому ссылка во втором параметре не нужна.
|
|||
|
||||
| Lorigin |
|
|||
|
Печатаю фото на холс Профиль Группа: Участник Сообщений: 29 Регистрация: 11.3.2008 Где: Москва Репутация: нет Всего: нет |
mes,
вылетает ошибка при вводе первого элемента: Unhandled exception at 0x102a5c53 (msvcr80d.dll) in Sortirovki.exe: 0xC0000005: Access violation writing location 0xcdcdcdcd. =( |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
void f (int ) // передача по значению .. т.е функция получает копию объекта void f(int&) // передача по ссылке.. т.е функция получает сам объект void f(int *) //передача по указателю.. т.е функция получает копию переменой, храняшую адрес первого (одного) объекта void f(int *&) //передача указателя по ссылке.. т.е функция получает саму переменую, храняшую адрес первого (одного) объекта |
|||
|
||||
| Lorigin |
|
|||
|
Печатаю фото на холс Профиль Группа: Участник Сообщений: 29 Регистрация: 11.3.2008 Где: Москва Репутация: нет Всего: нет |
int *mas = new int[dlina];
тоесть этим мы выделяем память для определенного количества целых чисел? так почему когда мы передаем VvodMas(mas, dlina); мы просто так пишем mas? и как тогда передать и принять адресс dlina, чтобы нам не выделять снова память?? и как патом из VvodMas обратиться? P.S. если у кого то есть подходящее чтиво где на элементарнейшим образом растолковано обращение с динамическими массивами при передаче между функциями.. буду крайне благодарен Это сообщение отредактировал(а) Lorigin - 8.11.2008, 23:51 |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
есть простые способы делать простые вещи
Это сообщение отредактировал(а) Lazin - 9.11.2008, 00:00 |
|||
|
||||
| Lorigin |
|
|||
|
Печатаю фото на холс Профиль Группа: Участник Сообщений: 29 Регистрация: 11.3.2008 Где: Москва Репутация: нет Всего: нет |
Lazin,
про STL я слышал и знаю.. но цель разобраться именно в моей задаче =\ |
|||
|
||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 1 Всего: 18 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
вот Вам примерчик , дальше надеюсь получится :
P.S и старайтесь обходиться без goto.. Тем более так как Вы сделали. |
|||
|
||||
| Lazin |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
да
mas это указатель, указатель это переменная, способная хранить адрес элемента определенного типа, в данном случае mas хранит адрес первого элемента массива, mas + 1 хранит адрес второго, mas + 2 третьего и тд... тоесть учитывается размер переменной, реально к адресу, для переменной типа int будет добавляться 4. на пальцах: если внутри указателя mas лежит значение 0x00100000, и мы прибавляем к нему 1, то указатель будет содержать 0x00100004(если размер типа int - 4 байта). При попытке разименовать это значение int tmp = *mas программа обратится к памяти по адресу 0x00100004, и прочитает оттуда 4 байта в переменную tmp. если ты пишешь mas[N] то это эквивалентно *(mas + N), где * - операция разименования, тоесть полученя значения хранящегося по адресу, хранящемуся в указателе. дальше, когда ты передаешь в функцию указатель,
функция может, изменять значения в массиве, но, если функция изменит сам указатель, внешний код этого не увилит
после вызова allocate переменная array все равно будет содержать 0, так как функция изменит только локальную копию указателя, что-бы этого избежать, нужно передать ссылку на указатель
в этом случае, в функцию передается не значение указателя(0) а адрес переменной array и если функция его изменит, внешний код это увидит, так как переменная array изменится ps то что я написал, написано в любой книге по с++, только понятно |
||||||||||
|
|||||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
зыы
в твоем примере достаточно простых указателей |
|||
|
||||
| Lorigin |
|
|||
|
Печатаю фото на холс Профиль Группа: Участник Сообщений: 29 Регистрация: 11.3.2008 Где: Москва Репутация: нет Всего: нет |
Спасибо.. сейчас опять углублюсь и все проштудирую снова
|
|||
|
||||
![]()
|
| Правила форума "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. |