![]() |
|
Модераторы: bsa |
![]()
|
|
| hoz |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
Читаю учебник, касательно указателей. Вот попался такой код:
Код прекрасно компилируется и на выходе вижу:
По скольку хочется въехать ы данную тему, я решил проверить как ведёт себя компилятор в различных вариациях. Изменил строку?
на такую:
При компиляции возникает ошибка:
Почему? Я с указателями столкнулся впервые, и немного путаюсь, хотя для чего они нужны понимаю. Ведь здесь всё, казалось бы просто. В исходном вариант: Указателю int присваивается значение адресса переменной var1, а затем var2 по ссылке. Тут всё понятно! В моём проверочном варианте: Переменной int присваивается значение адресса переменной var1, а затем var2 по ссылке. Это мысли вслух. Ошбика в чём? Я так понимаю значение адресса в 16-системе, а переменная типа int. Поэтому компилятор ругается на то, что типа ошибка в переводе int to int. |
||||||||||
|
|||||||||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
C++ типо-безопасный язык, а следовательно ты не можешь просто присвоить указатель переменной неявно. Чтобы это осуществить, ты должен выразить свои намерения явно:
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Нет. Перевод не из int в int. Компилятор же чётко говорит, что ему не нравится: И ещё. Учти, что в варианте vinter'а на 64-х разрядной системе (и, соответственно, 64-х битном компиляторе) в переменную типа int попадёт не весь адрес -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| hoz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
Так а как тогда быть? Получается что компилировать нужно код не просто так, а ещё учитывать разрядность системы Т.е. если я пишу программу, то нужно знать на какой системе я буду её компилировать? |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
||||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
hoz, я программирую уже лет 20 и я долго пытался вспомнить случай, когда мне нужно было проделывать такого рода трюки - и... не вспомнил. В С++ почти для каждого случая есть свой тип. Для адреса - указатель, для значения - int, double и т.п.
В общем, вывод такой: в целях изучения можно поиграться с указателями, присваивая их в int и обратно. В "боевой" программе этого делать категорически не рекомендуется. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]()
|
| Правила форума "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. |