|
|
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Может вопрос и совсем глупый и не раз упоминавшийся, но все-таки.... Обьясните, пожайлуста, чем указатели отличаются от ссылок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 22:34:20 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
eugenia_Может вопрос и совсем глупый и не раз упоминавшийся, но все-таки.... Обьясните, пожайлуста, чем указатели отличаются от ссылок Наиболее эффективное использование C++ --- Скотт Мейерс Правило 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 23:10:03 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Ссылка - это разыменованный указатель. как инь и янь. как кот с собакой. как доктор Ватсон и Хослмс. как... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 01:34:54 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
eugenia_ wrote: > Может вопрос и совсем глупый и не раз упоминавшийся, но все-таки.... > Обьясните, пожайлуста, чем указатели отличаются от ссылок Ссылку нельзя изменить, и должна быть инициализирована при объявлении. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 01:36:33 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Iggorrr wrote: > Ссылка - это разыменованный указатель. > как инь и янь. :) "Инь и янь" это, грубо говоря, две переходящие друг в друга противоположности, которые по отдельности не существуют :) (могу пару страниц описания скинуть, если найду, куда дел) Так что не неудачное сравнение, по-моему :) -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 01:42:41 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
eugenia_Может вопрос и совсем глупый и не раз упоминавшийся, но все-таки.... Обьясните, пожайлуста, чем указатели отличаются от ссылок Указатель это объект, ссылка - это синоним. Так что это совершенно разные вещи, которые похожи при использовании, но имеют множество отличий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 09:53:38 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Akh wrote: > Так что это совершенно разные вещи, которые похожи при использовании, > но имеют множество отличий. По-моему, и то и другое реализуется как адрес переменной (это если не рассматривать чистый язык, и насчет ссылки такой гарантии нет, впрочем), и отличие все-таки в ограничениях. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 15:53:38 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
ErV Akh wrote: > Так что это совершенно разные вещи, которые похожи при использовании, > но имеют множество отличий. По-моему, и то и другое реализуется как адрес переменной ErV Я, вот, в этом не уверен. Почему бы в некоторых случаях, когда это возможно, компилятору не использовать прямое обращение к объекту? Стандарт ограничения здесь не накладывает. (это если не рассматривать чистый язык, и насчет ссылки такой гарантии нет, впрочем), и отличие все-таки в ограничениях. Идеология совершенно разная. Это как машина и перемещение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 15:58:12 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Akh wrote: > Идеология совершенно разная. Идеология - да, разная, но различие не сильное. Но реализация (что мне встречалось) - все-таки адрес, как я помню... Т.е. грубо говоря - ссылка - это указатель, который не может быть изменен, и должен быть инициализирован при объявлении. т.е. (если не извращаться с cast'ингами) гарантировано наличие объекта, на который ссылаемся... -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 16:08:36 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
ErV Akh wrote: > Идеология совершенно разная. Идеология - да, разная, но различие не сильное. Но реализация (что мне встречалось) - все-таки адрес, как я помню... Т.е. грубо говоря - ссылка - это указатель, который не может быть изменен, и должен быть инициализирован при объявлении. т.е. (если не извращаться с cast'ингами) гарантировано наличие объекта, на который ссылаемся... увы не все так просто. Массив ссылок нельзя создать. А спрашивается почему, если это указатель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 16:16:54 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Akh wrote: > А спрашивается почему, если это указатель? Мне кажется, что косвенно это из-за того, что нельзя: 1) взять ссылку на ссылку 2) взять указатель на ссылку ЗЫ. Что вы имели в виду под "идеологией", теперь понятно, но, блин, все равно килинит из-за того, что я знаю, что ссылка будет с очень хорошей вероятностью представлена обычным адресом, т.е. будет указателем :-\ с ограничениями... -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 16:24:46 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
ну вы даете. даже меня запутали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 16:31:13 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
ErV ЗЫ. Что вы имели в виду под "идеологией", теперь понятно, но, блин, все равно килинит из-за того, что я знаю, что ссылка будет с очень хорошей вероятностью представлена обычным адресом, т.е. будет указателем :-\ с ограничениями... Да. Фактически это так. Но лучше не думать о реализации. Знать конечно хорошо, но размышлять надо по другому. Указатель - это мы получаем некий объект и работаем с ним. Ссылка же - это мы получаем способ доступа к объекту и пользуется им. Понятия разные, и, в общем случае, вещи не эквивалентные мы с ними далаем, т.к. способ доступа входит в понятие работаем, в этом контексте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 16:34:09 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Aklinну вы даете. даже меня запутали Да, это блин не хухры мухры. ;) Когда я пытался разобаться, почему не сделали sizeof(A&)==sizeof(A*) и дать возможность создавать массивы ссылок, то у меня чуть башню не снесло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 16:36:38 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Блин, указатель - это адрес в памяти. Можете хоть случайное число взять, привести его к типу указателя, и оно будет на что-нибудь указывать. Можете (опять же если захотите) во время выполнения программы прибавить к нему 10, он будет указывать на что-нибудь другое. Ссылка - это другое имя переменной. Ссылки обрабатываются на этапе компиляции. В компиляторе есть таблица переменных, в которой хранятся типы переменных, адреса и т.д., и таблица имён, в которой хранятся имена и ссылки на другие таблицы, где описано, что эти имена означают. Когда объявляется int i = 5; int &j = i; в таблице переменных создается одна запись, которая соответствует переменной i. А в таблице имен - две записи, одна для i и другая для j, которые ссылаются на одну и ту же запись в таблице переменных. Безумный ученый Страуструп придумал это для передачи изменяемых параметров в функции, потому что ему видите ли лень было писать void f (int *i) {*i = *i + 1;} Конечно, void f (int &i) {i = i + 1;} проще. А потом стал использовать этот механизм в качестве безопасного указателя, потому что нельзя забыть проинициализировать его, и нельзя его испортить. В ПХП, где нет указателей, используется точно такой же механизм ссылок, но он описан в хелпе понятными словами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 17:01:35 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
HryuckinnenВ компиляторе есть таблица переменных, в которой хранятся типы переменных, адреса и т.д., и таблица имён, в которой хранятся имена и ссылки на другие таблицы, А как же динамические переменные? Компилятор - телепат, и знает, какие и сколько создаться в процессе работы программы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 17:11:48 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Торможу... Пример можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 17:14:50 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
HryuckinnenТорможу... Пример можно? Если компилятор состовляет таблицу переменных, то он должен знать о всех переменных, которые присутсвуют в программе. Но в программе на С++ частенько появляются динамические объекты созданные с помощью оператора new, а то и целые списки, таблицы, деревья этих объектов. Как компилятор заранее может знать обо всех этих переменных и записать их, с их адресами, в таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 17:18:30 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Динамические переменные в таблицах не хранятся. Поскольку оператор new возвращает адрес созданного объекта, он используется в выражениях вида lvalue = new Чего-Нибудь, где lvalue - переменная-указатель, которая была объявлена и (в тот момент, когда компилятор разобрал её объявление) попала в таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 17:37:07 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
ЗЫ: компилятор создаёт таблицы только для именованных объектов, введенных с помощью инструкций объявления, чтобы где-то хранить информацию о том, что же означают эти имена. С адресом я, возможно, погорячился: компиляторы C++ производят файлы объектного формата, в которых адреса статических объектов не фигурируют, только символические имена. Статические адреса потом вычисляются линкером. Хотя для автоматических объектов адрес представляет собой смещение от начала стекового кадра и вычисляется компилятором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 17:52:43 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Hryuckinnen Чтож, тогда теория 2-х таблиц, в принципе, имеет право на жизнь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 17:54:53 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Стоит глянуть на какой-нибудь компилятор C++ с открытым исходником, gpp или что-нибудь типо того;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 17:57:29 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Hryuckinnen wrote: > В компиляторе есть таблица переменных, в которой хранятся типы > переменных Как я понимаю, если объявить Код: plaintext 1. 2. другим именем. Потом, извиняюсь, при чем тут таблица переменных? Она может быть на этапе компиляции, но какой смысл в ней в готовом бинарнике? Там есть единый(если не винда, то не факт, что единый :)) сегмент кода/данных и информация о переменных там будет только если использовался type_info. Для всего остального будет банальные несколько байт памяти и адрес. Т.е. "другое имя" трансформируется адрес, а адрес == указатель. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 18:18:22 |
|
||
|
Ccылки и указатели в Си++
|
|||
|---|---|---|---|
|
#18+
Про готовый бинарник никто не говорил. Таблицы сущестуют только в памяти компилятора. Обсуждалось, как компилятор разбирает конструкции типа int i; int &j = i; Что ксается формальных параметров, там ссылки действительно превращаются в указатели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 18:23:02 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34889652&tid=2027924]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
186ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 201ms |
| total: | 509ms |

| 0 / 0 |
