|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.06.2013, 14:16 | #1 |
Новичок
Джуниор
Регистрация: 27.06.2013
Сообщений: 1
|
Ссылки и указатели. Перехожу на с++ с Java
Всем привет. Знаю, эта тема поднималась уже не раз, но я так и не смог найти ответы на мои вопросы.
"В чем различие ссылок и адресов переменной?" "Есть ли разница между int* a или int *a?" "Как взаимосвязаны указатели и адреса переменной? Если у меня есть указатель a, я могу работать с a используя *a, но если у меня есть адрес на некий объект, как работать с этим объектом через ссылку?" "Объявления в с++. ClassA* a = new ClassA(); Можно ли изначально объявить переменную типа ClassA (не указатель) а потом его инициализировать?" (Пример) ClassA a; a = new ClassA(); "Когда в функции входной параметр - указатель или адрес, а у меня самого адрес или указатель я начинаю методом тыка перед указателем(ссылкой) ставить * и &. Иногда помогает, иногда нет. Как быть?" "При объявлении массивов в чем разница между char a[4] и char* a= new char[4];?" Для меня это единственная больная тема в с++. Она заставляла меня не раз закрывать VS и не вспоминать о C++ еще 3 дня. Помогите разобраться, пожалуйста Последний раз редактировалось blackalegator; 27.06.2013 в 14:37. |
27.06.2013, 15:06 | #2 | ||||
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
ссылка - это синоним имени некоторой переменной.
Все действия над ссылкой - это на самом деле действия над оригинальным объектом. Поэтому, ссылка не обладает идентичностью. Это единственный тип данных на языке с++, у которого отсутствует объект. Поэтому, у ссылки нельзя взять адрес. Попытка взять адрес ссылки приведет к тому, что вы получите адрес оригинального объекта. грубо говоря: Код:
А адрес переменной - это адрес куска памяти, где расположен сам объект который ассоциирован с именем этой переменной Разницы нет. Это дело вкуса. Вообще то, ответы на подробные вопросы есть в любой книжке для самых маленьких. Указатель - это такая же полноценная переменная. Которая внутри себя хранит адрес другой переменной: Код:
Цитата:
Код:
Цитата:
Код:
1. Создание объекта в куче 2. Создание объекта по указанному адресу new placement 3. создание объекта при помощи своего собственного аллокатора памяти Если ты только только начинаешь изучать язык, то тебе не стоит так сразу глубоко копать. Просто имей ввиду: Код:
Цитата:
2. Можно кодить по принципу глупой мартышки - тупым бездумным перебором. 3. Можно сменить роль деятельности, и например стать продавцом-консультантом. Цитата:
Код:
|
||||
27.06.2013, 22:37 | #3 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
на сколько я знаю в джаве все объекты создаются динамически, в плюсах не так. если ты объявил указатель и попытаешься изменить значение по этому адресу будет ошибка времени исполнения. и не забывай память освободить, если динамически выделил.
|
27.06.2013, 22:41 | #4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
28.06.2013, 10:14 | #5 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
я имел в виду это:
Код:
вообще если хочешь разобратся с указателями рекомендую написать класс "связный список", опыту наберешся Последний раз редактировалось SAMOUCHKA; 28.06.2013 в 10:41. |
28.06.2013, 10:16 | #6 |
C/C++, Java
Участник клуба
Регистрация: 28.03.2012
Сообщений: 1,680
|
Почему SAMOUCHKA не будет работать???
Что происходит в этом коде??
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости" Сложность - враг простоты и удобства! |
28.06.2013, 10:33 | #7 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
ошибки в коде нет. Ты объявил указатель. Указатель это переменная хранящая адрес, когда его объявил она хранит случайный адрес. И ты пытаешся изменить значение по этому адресу. На сколько знаю такое прокатывало на win98, начиная с xp такое не проходит. попробуй скомпилируй и запусти, увидишь что произойдет
|
28.06.2013, 11:03 | #8 |
C/C++, Java
Участник клуба
Регистрация: 28.03.2012
Сообщений: 1,680
|
Код:
"начиная с xp такое не проходит" Или вы думаете - это первые шаги машин к завоеванию и порабощению человечества.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости" Сложность - враг простоты и удобства! |
28.06.2013, 12:27 | #9 | |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
Цитата:
Код:
Но согласитесь это хорошо что современные ОС не дают изменить значение по произвольному адресу. Вдруг этот участок памяти занят другой программой, тогда результат будет непредсказуем Последний раз редактировалось SAMOUCHKA; 28.06.2013 в 12:29. |
|
28.06.2013, 13:07 | #10 | |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,285
|
Цитата:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
указатели и ссылки | Trampcher | Visual C++ | 1 | 02.06.2013 21:27 |
указатели и ссылки | syrga | Общие вопросы C/C++ | 10 | 18.01.2012 06:19 |
Перехожу с Delphi на Java. Нужна литература | Mr_freeman | Общие вопросы по Java, Java SE, Kotlin | 1 | 11.10.2011 14:55 |
указатели vs ссылки | Aistn | Общие вопросы C/C++ | 9 | 01.06.2011 23:02 |
ссылки и указатели. | mojohead | Помощь студентам | 13 | 14.01.2011 16:00 |