С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Любитель чаепитий
3744 / 1800 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
1

В чем сила указателей?

16.08.2015, 11:11. Показов 2129. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, вот часто вижу и в книгах и на форумах используются указатели и ссылки, но я в своих классах и программах использую простые переменные, я просто похоже не знаю, в чем их сила, подскажите, где их лучше использовать, чем обычные переменные. Заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2015, 11:11
Ответы с готовыми решениями:

В чем смысл указателей?
Дорогие друзья, не могу понять смысл указателей в С++? Для чего они нужны? Если не трудно на...

В чем отличие ссылочных переменных от указателей?
Всем привет. Вопрос в теме, чем отличаются int a=5; int &p=a; от int a=5; int *p=&a; Кроме...

В чём смысл использования указателей на функции
Собсно,я не могу понять,в чём смысл использования указателей на функции,ведь можно вызывать...

В чем отличие указателей и массивов на примере strlen()?
Здравствуйте уважаемые форумчаче. Появился вот такой вопрос. Почему функция strlen работает в...

7
Музыка нас Связала
232 / 232 / 52
Регистрация: 26.03.2008
Сообщений: 616
16.08.2015, 11:20 2
Есть много причин на это. К примеру скорость, при call by value, переменные копируются, а при call by reference передается лишь адрес. Далее с поитерами можно совершать арифметические действия (Pointer Arithmetic) и тд. тп.
1
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
16.08.2015, 12:48 3
Лучший ответ Сообщение было отмечено GbaLog- как решение

Решение

Цитата Сообщение от makfak Посмотреть сообщение
я просто похоже не знаю, в чем их сила
makfak, вот ты если работаешь в ОС Windows, то постоянно используешь на своём компьютере файлы, папки и ярлыки на них. Так вот, файлы и папки - это как переменные и экземпляры классов (объекты), а ярлыки - это как указатели.
В чём сила ярлыков? В том, что весит твой ярлык в пределах 1 Кб, а сам объект (файл с фильмом, к примеру) может весить несколько гигабайт (или даже несколько десятков гигабайт).
Вот в том же и сила указателей и ссылок. Экономия памяти и времени.

Добавлено через 5 минут
Вот в книге Праты "Язык программирования С++. Лекции и упражнения" (2012, 6-е издание, глава 8, стр. 371) про ссылки:
Цитата Сообщение от Стивен Прата
Язык C++ вводит в практику новый составной тип данных — ссылочную
переменную. Ссылка представляет собой имя, которое является псевдонимом, или
альтернативным именем, для ранее объявленной переменной. Например, если вы делаете
twain ссылкой на переменную clemens, можно взаимозаменяемо использовать эти
имена для представления данной переменной. В чем смысл применения
альтернативного имени? Не в том ли, чтобы помочь-тем программистам, которые не
удовлетворены сделанным ими выбором имен переменных? Вполне возможно, однако, основное
назначение ссылок — их использование в качестве формальных аргументов функций.
Применяя ссылку в качестве аргумента, функция работает с исходными данными, а
не с их копиями. Ссылки представляют собой удобную альтернативу указателям при
обработке крупных структур посредством функций. Они играют важную роль при
создании классов.
Добавлено через 8 минут
Цитата Сообщение от makfak Посмотреть сообщение
подскажите, где их лучше использовать, чем обычные переменные
Указатели, например, часто используют для передачи в функцию массива какого-либо типа. Вот типичный прототип функции отображения двумерного массива (матрицы):
C++
1
void show(double ** arr, int row, int col);
Указатели используются для представления строк в стиле Си:
C++
1
const char * cstring = "This is string in oldschool C-style."
Указателями являются итераторы в STL:
C++
1
2
3
vector<double>::iterator pr; 
for (pr = scores.begin(); pr != scores.end() ; ++pr) 
    cout << *pr << endl;
Ссылки весьма часто используют в параметрах обычных функций и функций-членов классов.
5
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
16.08.2015, 12:48 4
makfak, указатели так же нужны для хранения адресов динамически выделяемой памяти.
2
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
16.08.2015, 13:03 5
Ссылки весьма часто используют в параметрах обычных функций и функций-членов классов.
Вот типичный пример прототипа дружественной функции в классе:
C++
1
friend ostream & operator<<(ostream & os, const Time & t);
А вот определение этой функции:
C++
1
2
3
4
5
ostream & operator<<(ostream & os, const Time & t) 
{ 
    os << t.hours << " hours, " << t.minutes << " minutes"; 
    return os; 
}
Такая функция даёт возможность отображать объекты класса Time с помощью std::cout:
C++
1
2
3
4
5
6
7
8
9
# include <iostream>
 
int main()
{
    Time someTime;
    std::cout << someTime;
 
    return 0;
}
Добавлено через 6 минут
В качестве первого аргумента в функцию передаётся ссылка на объект по имени os класса ostream.
В качестве второго аргумента в функцию передаётся ссылка на объект по имени t класса Time.
Возвращаемое значение, опять же, ссылка на объект класса ostream.
1
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
16.08.2015, 13:47 6
Ну и еще:
1) полиморфное поведение возможно только если вы обращаетесь к объекту через указатель или ссылку.
2) ООП - это моделирование систем, а объекты системы должны взаимодействовать друг с другом. В паттернах проектирования объекты поддерживают связь друг с другом при помощи указателей или ссылок друг на друга.
3) Функция-член объекта класса может работать с этим объектом через его указатель this, который передается ей неявно.
3
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
16.08.2015, 13:48 7
makfak, ооп и массивы
0
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
16.08.2015, 15:39 8
Ну и классика жанра.
1
16.08.2015, 15:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2015, 15:39
Помогаю со студенческими работами здесь

Динамический массив указателей(не пойму в чем ошибка в коде)
есть код: При попытки записи данных слетает на инициализации name..не могу понять,или память...

В чем сила C#?
представилась возможность начать изучать программирование, вернее попробовать себя в профессии...

В чем сила OpenOffice?
Попробовал OpenOffice (сначала 3.2, а теперь и 3.3). Нормальная программа, хотя в ней еще...

В чём сила, брат(сестра)?
Собственно сабж. Интересно узнать мнение форумчан. Опрос анонимный:)


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru