![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
GrafF812 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Подскажите пожалуйста вот по какому вопросу. В документации по C++ сказано, что при передаче массива в функцию - он(массив) по умолчанию передается как константный указатель, т.е int * const. Вот пример:
Вопрос: почему я могу изменить адрес указателя а в функции f ? |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
1. Где? Я специально просмотрел стандарт и не нашел. Может, конечно, плохо искал - тогда подскажите, пожалуйста, в каком разделе. 2. Какой у Вас компилятор? Если VC, то у него не всегда соблюдаются правила -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
В f а - это другая переменная, которая ассоциирована с тем же массивом, но изменяя ее вы не меняете исходный массив. Распечатайте после f(a) значение *a и убедитесь.
Надеюсь вы запуталсиь в моем объяснении и впредь будете давать чуть более вменяемые названия переменным и функциям. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
sQu1rr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
Вы просто не доконца поняли документации. Имеется ввиду, что указатель в теле программы _tmain не будет менятся при измене указателя в f(). А с указателем a в f() вы вольны делать что угодно. В документации было написано int * const? В документации написано ![]()
VC идет по стандарту. Кто вам такими глупостями мозги пудрит? PS И вообще "по умолчанию передается как константный указатель" меня пугает. Куда по умолчанию? програмист сам задает как принимать и как отдавать. ИМХО утверждение некорректно Это сообщение отредактировал(а) sQu1rr - 21.3.2010, 20:17 |
||||
|
|||||
GrafF812 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
жжете товарищь ![]()
borisbn, Дейтел - Как программировать на С++ ![]() компилятор VS 2008. |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
вопрос на вопрос: а ты изменяешь адрес локального указателя или переданного в функцию? т.е. после выхода из функции изменится ли адрес начала массива? я думаю, что нет ![]() |
|||
|
||||
sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
||||
|
||||
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
во-первых, потрудитесь выражаться не как на базаре. во-вторых, не МНЕ "пудрят", а Я сам проверял. Например: 1. подчеркивание при декорировании в именах функций 2. перестановка перегруженных функций в виртуальной таблице
будет скомпилено так:
3. выравнивание на 8 байт не выравнивает vf_ptr и много ещё -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
>жжете товарищь
Учитесь читать прежде чем писать. И думать тоже. Что писал я: >это другая переменная, которая ассоциирована с тем же массивом, но изменяя ее вы не меняете исходный массив Что написалы вы: >*a = 100; И теперь особая, компутерная, магия: вы изменили не переменную ${ассоциацию с массивом}, а сам массив, не тронув при этом переменную. А вот >a++ это изменение переменной. На пересдачу! -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
На самом деле, в этой книжке имеется в виду, что массив может свободно конвертироваться в описанный выше указатель. Более того, если функция будет принимать указатель на void, то массив тоже к нему сконвертируется, при этом не важно, массивом каких элементов он был. |
|||
|
||||
GrafF812 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
djamshud,
ее и печатаю: Добавлено через 4 минуты и 51 секунду это изменение адреса, вам на пересдачу ![]() |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
GrafF812, вы наркоман штоле? После того, как записали в него сто, было бы удивительно увидеть что-то другое. Прошу заметить, что совет распечатать *a был дан относительно стартового сообщения, а не в попытке угадать ваш последующий ответ мне.
Добавлено через 11 минут и 40 секунд >это изменение адреса Кэп чуть чаем не поперхнулся. Но он сегодня в настроении и даст разъяснение: адрес - значение переменной, его изменение = изменение переменной. Изменение же данных по адресу, на который ссылается переменная, ни разу не изменение самой переменной. Я понимаю, что вы этого уяснить не можите, но не понимаю, зачем перечите. >вам на пересдачу Подумайте еще раз. Не приму же! :) -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
Проверять не буду, поверю на слово. Но такие тонкости лично меня не волнуют. Исправлюсь: VC++ удовлетворяет стандарт. Я выражаюсь как на форуме, потрудитесь уважать мою лень строить умные фразы ![]() GrafF812 имел ввиду это вашу опечатку, так что все таки вам на пересдачу, либо курсы работы над ошибками PS 1 цитата: какой акцент на личном миестоимении ![]() Это сообщение отредактировал(а) sQu1rr - 22.3.2010, 21:49 |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
>VC++ удовлетворяет стандарт.
Стандарту плевать на VC++, а вот разработчиков она часто не удовлетворяет. Вам перечислили далеко не все тонкости, где студия ведет себя как дилда. И из этих многих крошечных моментиков складывается каша. >GrafF812 имел ввиду это вашу опечатку В той фразе нет опечатки, лишь ошибка - отсутствие запятой, которая к счастью не влияет на смысл фразы целиком. Вы уж и сами простите мою лень, для людей военных поторять два раза и медленно у меня желания нет. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "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. |