|
|
|
Ссылки и указатели
|
|||
|---|---|---|---|
|
#18+
малость не понял: зачем использовать ссылку, если она полностью идентична по всем параметрам переменной, на которую указывает ссылка? почему бы не оперировать просто переменной? ведь при изменении значения ссылки меняется сразу и значение переменной. на счет передачи в ф-ии согласен, а ещё? и, кстати, про передачи в ф-ии: чем лучше пользоваться: указателями или ссылками? ведь суть одна и та же. и ещё вопрос: в каких случаях целесообразней исп-ть: А) именно ссылку Б) именно указатель С) ничего Д) и то и другое ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 08:47 |
|
||
|
Ссылки и указатели
|
|||
|---|---|---|---|
|
#18+
А можно переопределить существующий уже указатель на другую переменную? вначале его надо удалить. а как это сделать, если он был создан не в куче. delete тогда воспользоваться нельзя... а как иначе переопределить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 09:31 |
|
||
|
Ссылки и указатели
|
|||
|---|---|---|---|
|
#18+
Купи себе хорошую книжку по C++, твой вопрос по основам программирования. Использовать ссылку или переменную необходимо в зависимости от твоих потребностей в данной конкретной ситуации. При передаче в функцию по ссылке работа идет непосредственно с самим обьектом, а через переменную с его копией. Читай лучше книжки по программированию и не задавай таких вопросов, потому как не зная фундамента программирования дальше двигаться невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 09:51 |
|
||
|
Ссылки и указатели
|
|||
|---|---|---|---|
|
#18+
Wowan TА можно переопределить существующий уже указатель на другую переменную? вначале его надо удалить. а как это сделать, если он был создан не в куче. delete тогда воспользоваться нельзя... а как иначе переопределить? Ну, блин и каша у тебя в голове... Указатель - переменная, хранящая в себе адрес в памяти, где находятся необходимые данные. Указатель не создается через new и не может быть удален через delete. Только в конце программы. В этом смысле он совпадает с примитивными типами (int, char, float, double). Размеры (занимаемая память) у всех указателей РАВНЫ. Модификатор (указываемый при объявлении указателя, например: double *) служит для указания того, какие типы данных будут обслуживаться указателем, т.е. сколько байт считывать при обращении по указанному указателем адресу памяти. Специальным случаем является void *. Он подразумевает, что указатель просто указывает на какую-то область памяти, а затем, при необходимости, будет конкретизирован при помощи операции приведения типа. Переопределить указатель - значит заставить указывать его на другой участок памяти. Это делается элементарно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 09:55 |
|
||
|
Ссылки и указатели
|
|||
|---|---|---|---|
|
#18+
Ссылки и указалети имеют разную семантику. Ссылка более ограничена, это указатель, который нельзя изменить (не значение, на которое она ссылается, а то, куда она ссылается), указатель, который нужно обязательно проинициализировать (ссылка не может быть NULL), и указатель, который не нужно разименовывать ( *p ). А) именно ссылку Передача в функцию или класс большой структуры данных не по значению. Возвращение такой структуры откуда-то. Реализация свойств (геттеры и сеттеры). Б) именно указатель Для использования в сложных структурах данных типа связных списков, сетей и т.п. С) ничего возврат локальной (auto) переменной из функции; Д) и то и другое ??? Как это - И то, и другое ? Либо ссылка , либо указатель. Ну можно динамически выделенную структуру хранить как в ссылках, так и в указателях. В указателях -- более правильно (не будешь никого обманывать), в ссылках -- для ленивых, чтобы не разименовывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 10:11 |
|
||
|
Ссылки и указатели
|
|||
|---|---|---|---|
|
#18+
Сказки от Стонислава (все нижеприведенное неверно): Станислав C. Указатель не создается через new и не может быть удален через delete. Переменные типа "указатель на что-то" могут быть с любой областью видимости и любым классом памяти. Станислав C.Размеры (занимаемая память) у всех указателей РАВНЫ. Это просто сказка. Это зависит от реализации компилятора и модели памяти OS. За примером далеко ходить не надо - в DOS были указатели near, far, huge, которые имели РАЗНЫЕ размеры. Станислав C. Модификатор (указываемый при объявлении указателя, например: double *) Это - не модификатор, а тип данных. Все вместе со звездой. Станислав C. Специальным случаем является void *. Он подразумевает, что указатель просто указывает на какую-то область памяти, а затем, при необходимости, будет конкретизирован при помощи операции приведения типа. void * может использоваться и без приведения к указателю другого типа. Станислав C. Переопределить указатель - значит заставить указывать его на другой участок памяти. Это делается элементарно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Это- не переопределение. Это - присваивание указателю. Код: plaintext 1. 2. 3. 4. 5. 6. Ну и конечно никакой "специальной ячейки памяти 0" не существует. Это - просто общепринятое соглашение, по которому указатель со значением ((void*)0) считается не указывающим никуда. С таким же успехом можно использовать другие значения: ((void*)0xffff) или ((void*)0xDEAD) и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2006, 10:24 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=365&tid=2031703]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 387ms |

| 0 / 0 |
