Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Sluchayno
30 / 30 / 20
Регистрация: 22.09.2013
Сообщений: 311
#1

Указатели на слонов или А зачем нужны указатели? - C++

03.12.2015, 17:59. Просмотров 467. Ответов 10
Метки нет (Все метки)

Знаю что таких вопросов было уйма, но я так и не нашел ответа на свой вопрос.
Для чего нужны указатели? Что такое указатели я знаю, это переменная которая хранит в себе адрес в памяти. int *p.
Я не понимаю для чего это нужно? Зачем нам адрес в памяти если мы можем просто взять перемену и записать в нее какое то значение? Можно пример где без указателя, ну просто не обойтись? Или пример где лучше использовать указатель чем просто переменную?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2015, 17:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Указатели на слонов или А зачем нужны указатели? (C++):

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

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

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

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

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

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

10
zss
Модератор
Эксперт С++
6950 / 6512 / 4133
Регистрация: 18.12.2011
Сообщений: 17,175
Завершенные тесты: 1
03.12.2015, 18:23 #2
C++
1
2
3
4
5
6
7
8
9
10
void setvalue(int* x)
{
    *x=1;
}
int main()
{
    int k=0;
    setvalue(&k);
    cout<<k;
}
0
Даценд
Модератор
Эксперт .NET
4044 / 3884 / 2573
Регистрация: 20.04.2015
Сообщений: 7,060
03.12.2015, 18:24 #3
Цитата Сообщение от Sluchayno Посмотреть сообщение
Зачем нам адрес в памяти если мы можем просто взять перемену и записать в нее какое то значение?
1) функции, которые должны возвращать несколько значений могут сделать это только при передаче переменных по адресу
2) При передаче массива в функцию передается только адрес массива, при этом не происходит копирование всего массива
3) Передача функции в функцию через указатель
0
zss
Модератор
Эксперт С++
6950 / 6512 / 4133
Регистрация: 18.12.2011
Сообщений: 17,175
Завершенные тесты: 1
03.12.2015, 18:26 #4
Лучший ответ Сообщение было отмечено Sluchayno как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct A
{
   virtual void f(){cout<<"A";}
};
struct B:public A
{
   virtual void f(){cout<<"B";}
};
int main()
{
   A* pa;
   A a;
   B b;
   pa=&a;
   pa->f(); // вывод А
   pa=&b;
   pa->f();  // вывод В
}
1
Sluchayno
30 / 30 / 20
Регистрация: 22.09.2013
Сообщений: 311
03.12.2015, 18:51  [ТС] #5
Спасибо, стало более понятнее.
0
gogaloh
15 / 19 / 11
Регистрация: 14.03.2015
Сообщений: 603
03.12.2015, 20:10 #6
zss, у Вас добрые глаза, все работает, но где найти обьяснения, всего этого для таких как я
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
03.12.2015, 20:29 #7
gogaloh, бывают переменные, здоровые как слон ( Занимают много памяти). Вот, чтобы не таскать слона по функциям, можно показать где слон и что с ним надо сделать (оседлать, накормить).

Не по теме:

Там выше неаккуратное высскахывание о возврате

0
zss
Модератор
Эксперт С++
6950 / 6512 / 4133
Регистрация: 18.12.2011
Сообщений: 17,175
Завершенные тесты: 1
03.12.2015, 20:30 #8
Цитата Сообщение от gogaloh Посмотреть сообщение
где найти обьяснения
Читать, что такое классы, наследование и виртуальные функции.
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
03.12.2015, 20:33 #9
Где не обойтись? Создать обычный массив во время выполнения программы, указывая ему его размер во время выполнения этой самой программы.
0
gogaloh
15 / 19 / 11
Регистрация: 14.03.2015
Сообщений: 603
03.12.2015, 21:04 #10
Такую аллегорию я даже, если очень захочу не смогу забыть, и не один я буду еще Вас благодарить.
daslex, спаси тебя Боже.

Добавлено через 20 минут
zss,
void setvalue(int* x) // Создаем функцию, которая будет работать с адресом
*x=1; // по какому-то адресу размещаем 1
setvalue(&k) // Вызываем функцию и помещаем в нее адрес переменной
Все ли я правильно понял?
0
zss
Модератор
Эксперт С++
6950 / 6512 / 4133
Регистрация: 18.12.2011
Сообщений: 17,175
Завершенные тесты: 1
03.12.2015, 21:37 #11
Цитата Сообщение от gogaloh Посмотреть сообщение
Все ли я правильно понял?
Да, правильно
0
03.12.2015, 21:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2015, 21:37
Привет! Вот еще темы с решениями:

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

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Ссылки и указатели: зачем все это?
Здравствуйте форумчане. Кому не лень, могли бы мне доступно объяснить, для чего в С++ все так усложнять? Я про указатели, ссылки, взятие...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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