![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Xenon |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Предположим, есть массив:
Есть фунция, допустим, поиска самой длинной строки. Вот ее прототип:
Сама функция:
Я вызываю функцию при помощи:
Компилятор матюгается но неправильное использование массива в функции ... Как быть? Сначала задачу выполнял без указателей - просто создавалась копия массива при вызове функции и с нею работалось. А теперь как? Ведь мы передаем указателей и мы не знаем, сколько там элементов в том массиве, на который ссылается указатель, который передается функцие в качестве аргумента. Как в таких ситуациях быть? PS. И почему нужно явно указывать типа массива find_longest (str_count,(char**)&text); И почему перед именем массива надо ставить &? Ведь при передаче массива в функцию text уже изначально передается, как ссылка на адресс в памяти ... Это сообщение отредактировал(а) XenonSk - 31.5.2006, 22:29 |
||||||||
|
|||||||||
| MAKCim |
|
||||||||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
потому что тип text != char**
в памяти text располагается непрерывно и линейно Добавлено @ 22:43
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||||||||
|
|||||||||||||
| Xenon |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
MAKCim
А нельзя к массиву двумерному обращаться, как к двумерному? Я понимаю, что все равно в памяти все храниться, как одномерный, но все же ... Нельзя никак?
В смысле, почему? Ведь и то и другое типа char ... Если что, вот вся задача ... может тут можно чего удобнее сделать.
Это сообщение отредактировал(а) XenonSk - 31.5.2006, 23:37 |
||||
|
|||||
| likehood |
|
||||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
Можно, но придется задать вторую размерность массива в прототипе функции:
Это связано с тем, что тип двумерного массива не совпадает с char**. char** m - это массив из указателей, каждый из них указывает на свой одномерный массив. char m[MAX_STR][MAX_SYM] - по-сути одномерный массив. Операция m[i][j] работает по-разному для двух типов массивов, поэтому и возникает путаница. |
||||
|
|||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
baronp Ну я так и дела изначально, но в таком случае создается копия объекта ... А если массив большой? Не копировать же ...
|
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
||||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Ну я просто привык, что, раз если объекты при передаче в функцию копируются, то и массивы тоже .. Так, значит, не нужно замарачиваться с указателями, если хочется экономить память ... если массив не копируется. Я только из соображений экономии хотел заюзать указатели
|
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
||||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Понял, спасибо, а я чего-то зациклился
|
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
...бывает
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |