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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слабые сущности в Делфи. 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


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS