Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Николай12
-7 / 15 / 0
Регистрация: 13.05.2012
Сообщений: 169
#1

Объясните, пожалуйста, зачем в C++ нужны указатели - C++

22.03.2013, 12:51. Просмотров 1352. Ответов 11
Метки нет (Все метки)

Никак что-то не пойму, зачем в C++ указатели? Ведь можно спокойно программировать без них.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2013, 12:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объясните, пожалуйста, зачем в C++ нужны указатели (C++):

Указатели на слонов или А зачем нужны указатели? - C++
Знаю что таких вопросов было уйма, но я так и не нашел ответа на свой вопрос. Для чего нужны указатели? Что такое указатели я знаю, это...

Зачем нужны указатели - C++
Не могу понять синтаксис указателей. Понял, что это работа с адресами, что оператор & это адрес. А вот * как я понял, это объявление...

Зачем нужны указатели? - C++
Интересует вопрос, зачем нужны указатели? Например почему лучше нужно объявлять переменные как указатели, почему как обычно нельзя? ...

Зачем нужны многоуровневые указатели - C++
вопрос в названии темы

Зачем здесь нужны указатели - C++
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Не могу понять зачем нужны указатели? - C++
Не как не могу понять зачем нужны указатели. Я знаю что их надо использовать для выделения памяти, но раньше я и без них обходился

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CollSpack
7 / 7 / 0
Регистрация: 21.01.2013
Сообщений: 55
22.03.2013, 12:59 #2
К примеру без указателей нельзя сделать динамически расширяющийся массив.
0
igor001
8 / 3 / 1
Регистрация: 12.02.2013
Сообщений: 68
22.03.2013, 13:06 #3
Цитата Сообщение от CollSpack Посмотреть сообщение
К примеру без указателей нельзя сделать динамически расширяющийся массив.
вместо динамического массива можно использовать вектор

Цитата Сообщение от Николай12 Посмотреть сообщение
Никак что-то не пойму, зачем в C++ указатели? Ведь можно спокойно программировать без них.
попробуй внутри функции создать объекты, чтобы по выходу из функции они остались живы))
к тому же во многих случаях передавая в функцию объекты лучше избегать их копирования передавая их по сслыке/указателю
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
22.03.2013, 13:12 #4
Цитата Сообщение от igor001 Посмотреть сообщение
вместо динамического массива можно использовать вектор
а как по-твоему вектор работает? Это тоже класс, хранящий указатель на массив.
0
igor001
8 / 3 / 1
Регистрация: 12.02.2013
Сообщений: 68
22.03.2013, 13:16 #5
точно, сорь, тупанул)))
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
22.03.2013, 13:17 #6
По сути указатели предоставляют возможность обращаться к ЛЮБОЙ ячейке памяти компьютера.

Не по теме:

Да, результатом такого необдуманного обращения может быть сегфолт или что-то ещё непредсказуемое, но это отдельная тема. А суть вот.

0
CollSpack
7 / 7 / 0
Регистрация: 21.01.2013
Сообщений: 55
22.03.2013, 13:28 #7
Указатель еще нужен для того, чтобы изменять переменные из-под функции:

C++
1
2
3
4
5
6
7
8
9
10
11
void foo(int *p)
{
  *p+=5;
}
 
main()
{
  int i=0;
  foo(&i);
  cout<<i; //выведет 5
}
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
22.03.2013, 13:40 #8
пример: функция принимает указатель на базовый класс, и ты можешь ей передать указатель на потомка, работать будет - без этого в ООП не обойтись
0
igor001
8 / 3 / 1
Регистрация: 12.02.2013
Сообщений: 68
22.03.2013, 14:27 #9
Цитата Сообщение от CollSpack Посмотреть сообщение
Указатель еще нужен для того, чтобы изменять переменные из-под функции:

C++
1
2
3
4
5
6
7
8
9
10
11
void foo(int *p)
{
  *p+=5;
}
 
main()
{
  int i=0;
  foo(&i);
  cout<<i; //выведет 5
}

можно, но лучше по ссылке
C++
1
2
3
4
5
6
7
8
9
10
11
void foo(int &p)
{
  p += 5;
}
 
main()
{
  int i=0;
  foo(i);
  cout<<i; //выведет 5
}
только вот если ты передашь в функцию указатель на уже несуществующий элемент то получишь непредсказуемый результат, а если передавать ссылку, такого не произойдет (точно не помню, но скорее всего выдаст ошибку, а их можно пепехватывать)
0
Croessmah
Эксперт CЭксперт С++
13231 / 7503 / 846
Регистрация: 27.09.2012
Сообщений: 18,428
Записей в блоге: 3
Завершенные тесты: 1
22.03.2013, 15:09 #10
Цитата Сообщение от igor001 Посмотреть сообщение
попробуй внутри функции создать объекты, чтобы по выходу из функции они остались живы))
Выдавать наружу - не очень хорошая идея.
Цитата Сообщение от igor001 Посмотреть сообщение
можно, но лучше по ссылке
Ссылка - это всего лишь обертка над указателем, так что передается все равно указатель.

Добавлено через 3 минуты
Цитата Сообщение от Николай12 Посмотреть сообщение
Никак что-то не пойму, зачем в C++ указатели? Ведь можно спокойно программировать без них.
Например, для полиморфизма, передачи/возврата значений из функции, для индексации в массивах, для создания динамических структур(списки, деревья и т.д.).
В общем чем дальше будете изучать язык, тем больше будет им применения
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
22.03.2013, 15:27 #11
Низачем. Не нужны, пока не научитесь с ними обращаться или хотя бы не почитаете книжку, которая это объясняет, вместо того, чтобы задавать странные вопросы. Так же пользуйтесь поиском, обсуждалось не раз.
0
igor001
8 / 3 / 1
Регистрация: 12.02.2013
Сообщений: 68
22.03.2013, 15:32 #12
ссылка хоть и обертка над указателем, но все же это уже не указатель, некоторые ошибки, которые легко можно допустить при работе с указателями со ссылкой не прокатят. А на счет выдавать наружу... у меня в программе необходимо было создавать stringgrid динамически и не один, я их в функции создавал и хранил указатели на них в map, как по мне не такая уж и плохая идея. Конечно по началу я хотел в map класть сами объекты, но потом появилась необходимость создать map<UnicodeString,map<UnicodeString, StringGrid>> и я поимел excess violation, после чего стал хранить map<UnicodeString,map<UnicodeString, StringGrid*>> и все норм работает
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2013, 15:32
Привет! Вот еще темы с ответами:

Объясните зачем нужны конструкторы - C++
Зачем нужны конструкторы? Читаю в книгах, смотрю видеоуроки и все равно не понятно

Для чего нужны и зачем использовать smart-указатели? - C++
В Страуструпе не нашел, кто подскжает где можно про них прочитать ?)

Зачем присваивать переменной disc ноль? Объясните пожалуйста - C++
Зачем присваивать disc = 0 (см. 9 строчку кода: double oplata, disc=0; Препод говорит что нужен, интуиция и опыт что нет. Где я не прав?...

Объясните пожалуйста, как работает код. Указатели - C++
Если не сложно, напишите пожалуйста комметнтарии к каждой строке. Никак не могу разобраться. Программа разделяет строку на слова. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.03.2013, 15:32
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru