Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 03.04.2009, 11:12   #1
Alexcomeback
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 59
Репутация: 10
Вопрос О сущности указателей...

Здравствуйте уважаемые программисты!
Недавно начал изучение "плюсов", так скажем с нуля, с типами данных адресацией и т.д. и т.п. вроде как разобрался, всё достаточно понятно, однако как только дошёл до раздела про указатели, сразу же появилось море вопросов... Большинство из них разъяснить всё же удалось, научился пользоваться, понял как они работают, но.. Остался главный вопрос, ответ на который я не смог найти - зачем нужны указатели? Какая разница, что использовать, например саму переменную или указатель на неё, ведь на практике полуается что это одно и тоже (хотя исходя из названия и из того, как они работают указатели всё же не тоже самое что и переменные или массивы), какую пользу дают указатели, какое преимущество перед непосредственным обращением к переменной (или массиву)? Был бы очень признателен, если объяснение было на примере несложной программки (простите уж, новичок я ).
Заранее спасибо
Alexcomeback вне форума   Ответить с цитированием
Старый 03.04.2009, 11:43   #2
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,840
Репутация: 6850
По умолчанию

Указатель например в отличие от переменной можно спозиционировать на скажем любой элемент массива, если указатель на массив указывает, просто компилер не позволит такого обычной переменной.

К тому же типы в указателях можно создавать динамически, а жестко типизированные переменные создаются сразу и помешаются в секции данных.
Stilet вне форума   Ответить с цитированием
Старый 03.04.2009, 11:53   #3
pu4koff
ПрофессионалФорумчанин
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,496
Репутация: 3616
По умолчанию

1. Массив по факту есть указатель:
Код:
int a[10];
a[5] = 4; // По факту это будет что-то вроде: *(a+5) = 4;
2. struct или class будете в функции по значению передавать, а следовательно неявно создавать новый объект и копировать туда передаваемый в функцию?
3. Виртуальные функции в ООП работают только через указатели
__________________
http://coub.com/view/2hhtg
pu4koff вне форума   Ответить с цитированием
Старый 03.04.2009, 12:26   #4
Blade
Software Engineer
Профессионал
 
Аватар для Blade
 
Регистрация: 07.04.2007
Адрес: Москва
Сообщений: 1,618
Репутация: 389

icq: 303547894
По умолчанию

При передачи переменной в функцию, создается ее копия, следовательно тратится лишняя память. Если передавать не саму переменную, а ее адрес (указатель на нее), такой проблемы не возникает.

Без использования указателей, в какой либо функции, не возможно изменить значение более чем одной переменной, т.к. в функцию передаются копии этих переменных, а вернуть из функции можно только одно значение. Использование указателей решает эту проблему

Вся работа с динамическим распределением памяти происходит через указатели
__________________
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума   Ответить с цитированием
Старый 03.04.2009, 14:44   #5
Pashan
Форумчанин
 
Регистрация: 18.03.2009
Адрес: Москва
Сообщений: 89
Репутация: 35
По умолчанию

Alexcomeback,
тут люди в общем уже все написали, но обычно, чтобы реально понять, зачем что-то нужно, надо решить задачу, которая без этого не решается (или решается, но через одно место).
Попробуй, например, сделать следующую прогу:
1. Пользователю предлагается ввести произвольное неотрицательное число (может быть большим!). После ввода заводится целочисленный массив с таким количеством элементов и инициализируется случайными числами. Как будешь делать?
2. Этот массив надо отсортировать с помощью отдельной функции, но не использовать под него глобальную переменную. Как будешь делать?
Pashan вне форума   Ответить с цитированием
Старый 03.04.2009, 19:12   #6
Alexcomeback
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 59
Репутация: 10
По умолчанию

Ушёл переваривать всё вышесказанное...

2Pashan
Насчёт пункта 2: то есть как я понял удобнее не грузить всю переменную в какую-либо функцию для обработки, а просто с помощью указателя "ткнуть" в её месторасположение?
Если так, то по крайней мере 1 плюс "тыкальщиков" я всё же уяснил..
Alexcomeback вне форума   Ответить с цитированием
Старый 03.04.2009, 19:17   #7
Alexcomeback
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 59
Репутация: 10
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
При передачи переменной в функцию, создается ее копия, следовательно тратится лишняя память. Если передавать не саму переменную, а ее адрес (указатель на нее), такой проблемы не возникает.
Вопрос по пункту 2 отпал
Alexcomeback вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слабые сущности в Делфи. Droid БД в Delphi 10 19.01.2009 23:09
массив указателей на методы класса? cout Общие вопросы C/C++ 2 08.05.2008 09:43
Массив указателей на структуры SNAKE89 Общие вопросы C/C++ 4 27.12.2007 11:14
Инициализация массива указателей. Непонятно !!! Adamant Общие вопросы C/C++ 2 05.11.2007 17:22


05:55.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.