powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ссылки и указатели
6 сообщений из 6, страница 1 из 1
Ссылки и указатели
    #33618984
Wowan T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
малость не понял: зачем использовать ссылку, если она полностью идентична по всем параметрам переменной, на которую указывает ссылка? почему бы не оперировать просто переменной? ведь при изменении значения ссылки меняется сразу и значение переменной. на счет передачи в ф-ии согласен, а ещё? и, кстати, про передачи в ф-ии: чем лучше пользоваться: указателями или ссылками? ведь суть одна и та же.
и ещё вопрос: в каких случаях целесообразней исп-ть:
А) именно ссылку
Б) именно указатель
С) ничего
Д) и то и другое ???
...
Рейтинг: 0 / 0
Ссылки и указатели
    #33619055
Wowan T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно переопределить существующий уже указатель на другую переменную? вначале его надо удалить. а как это сделать, если он был создан не в куче. delete тогда воспользоваться нельзя... а как иначе переопределить?
...
Рейтинг: 0 / 0
Ссылки и указатели
    #33619093
Фотография Evgeshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Купи себе хорошую книжку по C++, твой вопрос по основам программирования.

Использовать ссылку или переменную необходимо в зависимости от твоих потребностей в данной конкретной ситуации. При передаче в функцию по ссылке работа идет непосредственно с самим обьектом, а через переменную с его копией. Читай лучше книжки по программированию и не задавай таких вопросов, потому как не зная фундамента программирования дальше двигаться невозможно.
...
Рейтинг: 0 / 0
Ссылки и указатели
    #33619103
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wowan TА можно переопределить существующий уже указатель на другую переменную? вначале его надо удалить. а как это сделать, если он был создан не в куче. delete тогда воспользоваться нельзя... а как иначе переопределить?
Ну, блин и каша у тебя в голове...
Указатель - переменная, хранящая в себе адрес в памяти, где находятся необходимые данные. Указатель не создается через new и не может быть удален через delete. Только в конце программы. В этом смысле он совпадает с примитивными типами (int, char, float, double).
Размеры (занимаемая память) у всех указателей РАВНЫ.
Модификатор (указываемый при объявлении указателя, например: double *) служит для указания того, какие типы данных будут обслуживаться указателем, т.е. сколько байт считывать при обращении по указанному указателем адресу памяти.
Специальным случаем является void *. Он подразумевает, что указатель просто указывает на какую-то область памяти, а затем, при необходимости, будет конкретизирован при помощи операции приведения типа.
Переопределить указатель - значит заставить указывать его на другой участок памяти. Это делается элементарно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
double *p;//p указывает на "специальную" ячейку памяти 0, т.е. не указывает 
              //ни на какую переменную
double a,b;
p=&a; //p указывает на переменную а
...
p=&b;//р указывает на переменную b
p=NULL; //p указывает на "специальную" ячейку памяти 0, т.е. не указывает ни 
            //на какую переменную
...
Рейтинг: 0 / 0
Ссылки и указатели
    #33619165
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ссылки и указалети имеют разную семантику. Ссылка более ограничена, это указатель, который нельзя изменить (не значение, на которое она ссылается, а то, куда она ссылается), указатель, который нужно обязательно проинициализировать (ссылка не может быть NULL), и указатель, который не нужно разименовывать ( *p ).

А) именно ссылку

Передача в функцию или класс большой структуры данных не по значению.
Возвращение такой структуры откуда-то.
Реализация свойств (геттеры и сеттеры).

Б) именно указатель

Для использования в сложных структурах данных типа связных списков, сетей и т.п.

С) ничего

возврат локальной (auto) переменной из функции;

Д) и то и другое ???
Как это - И то, и другое ? Либо ссылка , либо указатель.

Ну можно динамически выделенную структуру хранить как в ссылках, так и в указателях. В указателях -- более правильно (не будешь никого обманывать), в ссылках -- для ленивых, чтобы не разименовывать.
...
Рейтинг: 0 / 0
Ссылки и указатели
    #33619198
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сказки от Стонислава (все нижеприведенное неверно):

Станислав C.
Указатель не создается через new и не может быть удален через delete.


Переменные типа "указатель на что-то" могут быть с любой областью видимости и любым классом памяти.

Станислав C.Размеры (занимаемая память) у всех указателей РАВНЫ.


Это просто сказка. Это зависит от реализации компилятора и модели памяти OS. За примером далеко ходить не надо - в DOS были указатели near, far, huge, которые имели РАЗНЫЕ размеры.

Станислав C.
Модификатор (указываемый при объявлении указателя, например: double *)


Это - не модификатор, а тип данных. Все вместе со звездой.

Станислав C.
Специальным случаем является void *. Он подразумевает, что указатель просто указывает на какую-то область памяти, а затем, при необходимости, будет конкретизирован при помощи операции приведения типа.


void * может использоваться и без приведения к указателю другого типа.

Станислав C.
Переопределить указатель - значит заставить указывать его на другой участок памяти. Это делается элементарно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
double *p;//p указывает на "специальную" ячейку памяти 0, т.е. не указывает 
              //ни на какую переменную
double a,b;
p=&a; //p указывает на переменную а
...
p=&b;//р указывает на переменную b
p=NULL; //p указывает на "специальную" ячейку памяти 0, т.е. не указывает ни 
            //на какую переменную


Это- не переопределение. Это - присваивание указателю.

Код: plaintext
1.
2.
3.
4.
5.
6.
double a,b;
double *p = &a; //p указывает на переменную а
...
{
double *p = &b; // Другой р указывает на переменную b
}

Ну и конечно никакой "специальной ячейки памяти 0" не существует. Это - просто общепринятое соглашение, по которому указатель со значением ((void*)0) считается не указывающим никуда. С таким же успехом можно использовать другие значения: ((void*)0xffff) или ((void*)0xDEAD) и т.п.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ссылки и указатели
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]