24.09.2020, 02:17 [+3 UTC]
в нашей команде: 4 740 чел. | участники онлайн: 1 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.90 (14.08.2020)
JS-v.1.45 | CSS-v.3.39

Общие новости:
13.04.2020, 00:02

Форум:
04.09.2020, 20:48

Последний вопрос:
24.09.2020, 01:11
Всего: 152906

Последний ответ:
23.09.2020, 14:56
Всего: 260433

Последняя рассылка:
23.09.2020, 19:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
04.02.2011, 18:03 »
lamed
Спасибо, воспользуюсь советами. [вопрос № 182097, ответ № 265718]
28.06.2010, 16:09 »
Dimon4ik
Спасибо. На счет официального названия - я тоже думаю, что его нет. Так как тоже не находил. [вопрос № 179333, ответ № 262315]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе


Перейти к консультации №:
 

Консультация онлайн # 72655
Раздел: • С / С++
Автор вопроса: Hunter20
Отправлена: 25.01.2007, 22:04
Поступило ответов: 5

Здравствуйте эксперты!Скажите для чего нужны указатели в C++ ,какую функцию они выполняют?
(я начинающий)

Состояние: Консультация закрыта

Ответ # 139162 от Рязанов Максим Валерьевич

Здравствуйте, Hunter20!
Указатель в C++ служит для хранения адреса объекта.
Существует также специальная операция взятия адреса, обозначаемая символом &.
Ее результатом является адрес объекта.

Приложение:


Консультировал: Рязанов Максим Валерьевич
Дата отправки: 25.01.2007, 22:37

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 139168 от ramok

Здравствуйте, Hunter20!

указатели удобны и эффективны при работе с массивами и структурами/классами.
самый очевидный пример это передача в фунцию как параметр:
void f(char *b)
{
*b = 1;
b[1] = 2;
}

char a[100000];
int main()
{
f(a);
return 0;
}

в этом примере при передаче массива внутрь фунции не делается копия всего большого массива, а передается только указатель на его начало. что несомненно быстрее чем создавать копию 100000 элементов Ж:-) (к слову сказать в С++ вам и не удастся передать
массив внуть фунции по значению, но это просто как пример).

более сложный, но уже вполне реальный пример вот:
class A
{
public:
char a[100000];
};

void f1(A *b)
{
*(b->a) = 1;
b->a[1] = 2;
}

void f2(A b)
{
*(b.a) = 1;
b.a[1] = 2;
}

A aa;
int main()
{
f1(&aa);
f2(aa);
return 0;
}

в фунции f1 будет передан только указатель на объект класса.
а фунции f2 будет сделана копия класса и передана внутрь фунции. тоесть будет скопировано как минимум 100000 байт. что скажется и на скорости и на кол-ве оперативной памяти занимаемой программой.

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

хотя указатели это палка о двух концах. если ошибится с адресом в указателе, то программа поведет себя не предсказуемо. в некоторых языках программирования(java, C#...) намеренно отказываются от указателей.


Консультировал: ramok
Дата отправки: 25.01.2007, 23:10

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 139174 от Mitya86

Здравствуйте, Hunter20!

указатель - это адрес ячейки памяти, которая может содержать какое-либо значение.
не все указатели одинаковы. например если указатель указывает(прости за тафтологию) на значение типа int, то это означает что он адресует область памяти размером 4 байта, если на значение типа char - то 1 байт.
указатели могут указывать на значения как встроенных типов данных, так и на значения тип которых определен пользователем(например на объекты классов).
указатели используют для передачи данных в функции. например нам нужно передать в какую-либо функцию массив содержащий миллион элементов. если мы будем передавать по значению, это будет означать что во время выполнения программы в момент передачи будет создан такой же массив, что не есть хорошо, поскольку занимает много памяти. можно поступить проще - передав указатель на первый элемент массива.
так же наличие указателей позволяет реализовать один из принципов объектно-ориентированного программирования - полиморфизм.
вот в кратце и все. а вообще лучше читай страуструпа.
удачи.


Консультировал: Mitya86
Дата отправки: 26.01.2007, 00:04

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 139188 от Torsten

Здравствуйте, Hunter20!
Не пытайтесь понять это сходу - это невозможно.
Я около двух месяцев ходил и не понимал для чего они нужны, а потом ... осознание само пришло.

Для программирования на С/С++ понимания указателя одно из главных. С помощью него можно творить такое, что ни на одном другом языке сделать нельзя, и при этом это будет красиво и очень быстро. Во многом так же зависит от креатива программиста, ведь с помощью указателей появляются большое разнообразие в алгоритмах, которые будут не переносимы на другие языки, за исключением разве что ассемблера.

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

Вот, единственное только что скажу смотрите в сторону динамических структур данных, например, массивов. Динамическое выделение и освобождение памяти.


Консультировал: Torsten
Дата отправки: 26.01.2007, 02:41

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 139310 от Thread

Здравствуйте, Hunter20!
Указатель это переменная, которая содержит в себе адрес другой переменной. Несколько указателей могут указывать на один объект. Вот пример:
int *a; - объявляем пременную, которая содержит в себе адрес (указывает)некоторой переменной в памяти типа int.
стоит заметить, что после такого объявления a никуда конкретно указывает, т.е. BadPtr, и при попытке ее использовать вылезет ошибка. Если указатель это адрес, то логичен вопрос как получить какой-то адрес. Для этого служит оператор &. Пример: пусть есть переменная b:
int b = 4;
и есть указатель a:
int *a;
теперь присвоим a адресс b:
a = &b;
А теперь об использовании. Что бы обратиться к значению нужно использовать разименование. Деллается это добавлением *. Т.е. a - это адресс, *a - то что по этому адресу находиться.
int b = 4;
int *a = &b;
*a = 3;//Теперь хначение b равно 3.
Можно также выделить одну или несколько ячеек и взять адрес первой выделенной ячейки. Для это есть оператор new (стоит заметить, что он есть только в С++, в С его нету).
int *a = new int[3];//выделяем три ячейки типа int, оператор new возвращает адресс первой из них.
Далее важный момент это адресная арифметика. Пусть а - это указатель, тогда а + 1 это тоже адрес, но следующей ячейки. a++ здесь указатель сдвигается на одно значение. Важный момент: *(a + 2),это тоже самое, что и a[2], т.е. мы можем работать с группой выделенных ячеек как с массивом. После завершения работы с указателем его нужно удалить с помощью delete. Например так: delete a;


Консультировал: Thread
Дата отправки: 26.01.2007, 15:16

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.17513 сек.

© 2001-2020, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.90 от 14.08.2020
Версия JS: 1.45 | Версия CSS: 3.39