![]() |
|
Модераторы: bsa |
![]()
|
|
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Изучаю С++. Пока на начальном этапе. В одной из книжек попалось упражнение с станд. функцией long strtol(const char *start, const **end, int base);
Не понятен 2-ой параметр у функции end... Это указатель - но зачем две звездочки у него. Каков смысл? Может кто нибудь объяснить? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
две звездочки это указатель на указатель.
В вашем случае это необходимо, чтоб вернуть указатель из функции. P.S. у Вас имхо опечатка : вместо const ** end должно быть char ** end. Это сообщение отредактировал(а) mes - 9.4.2009, 16:40 |
|||
|
||||
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Неа... не опечатка. Прототип такой у неё. И все же - а зачем в данном случае требуется использовать указатель на указатель. Какая в этом необходимость?
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
and277
Как уже сказал mes это указатель на указатель..раскрою немного подробнее. Указатель это тоже переменная, и она тоже занимает место в памяти (и там записан указатель). И у этой переменной тоже есть адрес. Есть указатели, есть указатели на указатели, есть указатели на указатели на указатели (так можно продолжать бесконечно)
даже вот это вполне нормально (в каком то смысле |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Зачем обычную переменную передают по указателю/ссылке знаете ?
чтоб можно было работать с самой переменной (а не с копией) и в ней вернуть результат работы функции. то же самое и с указателем. Если передать просто, то функция получит копию указателя, и не сможет изменить сам указатель и если изменение необходимо то нужно передать указатель по указателю/ссылке. Вот пример :
Добавлено @ 16:50 также есть и другое применение, для реализации двух (и более) мерных динамических массивов Добавлено @ 16:52
http://www.cplusplus.com/reference/clibrary/cstdlib/strtol/ там по ссылке описание, а также неплохой пример - не мешало бы разобрать Это сообщение отредактировал(а) mes - 9.4.2009, 17:00 |
||||
|
|||||
| azesmcar |
|
||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
ясно что прототип, но ошибочный, такой код не скомпилируется, попробуйте
покажу на примере
так вот, с равен 0, так как ты хоть и присвоил указателю new char[10], на самом деле ты присвоил это копии указателя а не самому указателю.. это тоже самое что написать
значение с не изменится так как ты изменил не обьект с а его копию, то же самое с указателем..чтобы исправить этот код так чтобы он изменял с, надо передавать либо указатель либо ссылку..тоже самое с кодом н. 1. Надеюсь доступно рассказал? Это сообщение отредактировал(а) azesmcar - 9.4.2009, 16:53 |
||||||||
|
|||||||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
не компилится: error C2664: 'f2' : cannot convert parameter 1 from 'char [10]' to 'char **' я исправил:
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
опередели меня
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
zim22
этот??? низачто не поверю, выдаст что-то вроде missing type specifier Это сообщение отредактировал(а) azesmcar - 9.4.2009, 16:58 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
||||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
UnrealMan к словам придираешся.
char *b = 0; кто скажет что b не переменная пусть первый кинет в меня камень..реч была об этом если ты не понял. |
|||
|
||||
| zim22 |
|
||||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
это из MSDN Добавлено @ 17:05 azesmcar, это уже смешно. UnrealMan и вам поставил минус. добро пожаловать в клуб Добавлено @ 17:06
функция почти аналогичная.
для неё есть пример из МСДН
Это сообщение отредактировал(а) zim22 - 9.4.2009, 17:08 |
||||||||
|
|||||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
zim22,
вот именно char **endptr а не const **endptr
спасибо |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
||||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
тюты, нуты. я количество звёздочек считал, и не обращал внимания на const или char |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
||||
|
||||
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Спасибо! Там действительно во 2-м параметре char **end.
Внимательно читаю все ваши посты сейчас. Просветление вроде наступает |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
так делают только некоторые компиляторы (помойму и не всегда) Добавлено через 2 минуты и 38 секунд Обидно только, что человек с хорошим багажом знаний ведет себя как партизан. Это сообщение отредактировал(а) mes - 9.4.2009, 17:17 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Я так понимаю только в случае режима совместимости с С. Там по умолчанию int предполагался вроде как. Ну суть не меняется - скомпилироваться может и скомпилируется, ясно, что ошибка в прототипе - бессмыслица. Выяснили. А указатель на указатель нужен для того, чтобы показать на каком символе строки остановилась проверка. |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
да, но надо бы понять что мы тут не книги пишем..когда новичку что-то пишешь надо писать максимально понятными терминами а не впадать в экстаз и использовать весь словарным запас подчерпанный из стандарта С++ и книг Александреску Добавлено через 1 минуту и 5 секунд
студия 2008 этого не поддерживает, 6-ой вроде поддерживал, но по любому это не верно так писать. |
||||
|
|||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
UnrealMan поставил минус azesmcar-у с комментарием:
Указатель - это объект, а переменная - это именованный объект. Указатель может не иметь имени. Если честно, я не понял в чем предъява. Исправляю. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Anikmar
предъява в том что я написал
просто речь шла об именованном указателе а не абстрактном понятии указатель.. char *b; b - это переменная. и у нее есть адрес. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Лично я эту фразу понял и с ней согласен. Видимо UnrealMan не понял о чем речь. На самом деле UnrealMan занятная личность. На форуме скрыт, последний раз участвовал в дискуссии в январе, с тех пор сидит втихаря и минусы ставит. Предполагаю из-за своего счетчика сообщений - у него 666 сообщений Видимо нравится ему быть неким "темным кардиналом". |
|||
|
||||
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Если я правильно понял - указатель на указатель нужен для того чтобы изменить указатель который при вызове этой функции я ввожу.
Правильно? Это чо же получается - эта функция возвращает указатель end , как и возвращаемое значение long int? Это сообщение отредактировал(а) and277 - 9.4.2009, 17:40 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Я не смотрел описание этой функции - высказываю догадку: В end будет указатель, который указывает на первый символ после найденного long. Наверное для этого. Может понадобится для следующего преобразования. А само возвращаемое - это собственно результат преобразования. Может я не прав - нет под рукой хелпа. |
|||
|
||||
| and277 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Anikmar, про первый символ прав 100 пудов.
|
|||
|
||||
![]()
|
| Правила форума "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. |