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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 169, средняя оценка - 4.97
Диман56
22 / 22 / 0
Регистрация: 07.11.2011
Сообщений: 154
#1

Понимание для чего вообще нужны указатели? - C++

12.11.2011, 20:12. Просмотров 23722. Ответов 112
Метки нет (Все метки)

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

Для чего нужны указатели? - C++
Кто может объяснить для чего нужны указатели и смысл их? в интернете одна муть и еще для чего нужно new delete

Для чего нужны указатели на функции? - C++
для чего нужны эти указатели на функции... не проще ли вызвать саму функцию, чем заводить под нее указатель и им пользоваться...

Ссылки и указатели, для чего нужны те и другие? - C++
Что такое ссылки? Что такое указатели? ДЛЯ чего служат те и другие?

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

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

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

112
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
13.11.2011, 07:59 #46
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
С точки зрения прикладника указатели в С++, разумеется, не нужны. Поскольку у прикладника просто не встанет никогда такой задачи, в которой бы они понадобились. Но вот с точки зрения системщика без указателей не обойтись. Я уж не говорю о чистом С, но даже в С++, когда пишется какая-нибудь высокоуровневая обёртка над низкоуровневыми вещами - там указатели сплошь и рядом. Штука в том, что в джаве, например, сама виртуальная машина предоставляет прокладку между языком и средой (ОС) с исчерпывающим функционалом, и там нельзя сделать больше того, что разрешаете ВМ, но в то же время в большинстве случаев достаточно того, что она предоставляет. Потому там хватает высокоуровневых ссылок и сборщика мусора. С++ же язык с настолько широкими возможностями, что он предоставляет как написание программ на очень высоком уровне, так и низкоуровневое программирование, в котором без сырой работы с памятью никак.
Из всего этого вытекает, что нужность или ненужность указателей целиком и полностью зависит от того, на каком уровне пишет программист. И внутри всех языков, которые не предоставляют указатели в чистом виде, всё равно происходит работа с памятью, и всё равно есть указатели, от этого никуда не уйти. Не будь указателей в С - не появилась бы Джава.
4
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
13.11.2011, 08:39 #47
Цитата Сообщение от Диман56
Не понимаю их конкретной пользы, смысла.
указатель - удобный инструмент
легко сохранить адрес чего-нибудь, а потом туда обратиться, когда угодно
при передаче указателя передаётся только то количество байт, которое требуется для хранения одного адреса
благодаря этому массивы передаются в функции очень быстро, не делается копия всех элементов, чтобы просто его передать
чтобы передать массив в функцию, начиная не с того элемента, который стоит у него в начале, а со второго, нужно просто переместить указатель на второй элемент с помощью арифметической операции
1
ValeryLaptev
Эксперт С++
1046 / 825 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
13.11.2011, 10:43 #48
Диман56, память компьютера - это массив. Каждый элемент массива имеет номер. Начинается с нуля. В Интеле - это массив байтов.
Как ты понимаешь, номер - это целое число. Правильно его называть - адрес.
Для хранения номеров-адресов можно объявить переменную. Это и будет переменная - указатель. А храниться в ней будут адреса данных.
Как ты понимаешь, переменная - одна, а адреса в ней могут быть разные. Что дает нам доступ к разным переменным в памяти.
0
Диман56
22 / 22 / 0
Регистрация: 07.11.2011
Сообщений: 154
13.11.2011, 11:30  [ТС] #49
Bers, спасибо вам огромное!!! Со структурами уже приходилось работать, поэтому второй вариант для меня более приемлемый) Тем более, мне нужно записывать ещё кое-какие данные о файле, поэтому юзать буду структуру.
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
13.11.2011, 15:36 #50
Цитата Сообщение от silent_1991 Посмотреть сообщение
С точки зрения прикладника указатели в С++, разумеется, не нужны. Поскольку у прикладника просто не встанет никогда такой задачи, в которой бы они понадобились.
не понял, в с++ обходится без указателей значительно сложнее, чем ими пользоваться
отказ от указателей заставляет использовать вещи посложнее
2
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
14.11.2011, 08:28 #51
alex_x_x, прикладной программист просто-напросто будет использовать библиотеки, в которых есть высокоуровневые обёртки для всего, что может ему понадобиться. В этих обёртках могут использоваться указатели (список, умный указатель и т.д.), но программисту об этом думать не приходится.
0
Bers
Заблокирован
14.11.2011, 09:10 #52
Цитата Сообщение от accept Посмотреть сообщение
указатель - удобный инструмент
легко сохранить адрес чего-нибудь, а потом туда обратиться, когда угодно
мина замедленного действия?
0
LosAngeles
Заблокирован
14.11.2011, 09:12 #53
silent_1991, в qt есть все обёртки, но их редко кто использует, в cool reader'е или smplayer их например нет. В qt деревья используются и отношения сын-предок для контроля ресурсами и временем жизни, но в итоге это всё равно выливается в интенсивном использовании указателей в коде
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
14.11.2011, 09:17 #54
Цитата Сообщение от Диман56 Посмотреть сообщение
Сейчас будет чистый мой тупняк. Слабонервным дальше не читать. Итак, для чего вообще нужны указатели? Я вот не пойму, зачем их надо было вообще придумывать???
Их не надо придумывать, проблематично как раз придумать, как обойтись без них.
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
14.11.2011, 10:21 #55
Цитата Сообщение от Bers
мина замедленного действия?
если контроль теряется, многие вещи могут вылиться во что-нибудь
чтобы не терять контроль, нужно писать небольшие процедуры
1
Bers
Заблокирован
14.11.2011, 10:26 #56
Цитата Сообщение от accept Посмотреть сообщение
если контроль теряется, многие вещи могут вылиться во что-нибудь
чтобы не терять контроль, нужно писать небольшие процедуры
тогда не говорите "когда угодно". говорите "когда можно".

Вопрос: кто решает "когда можно"?

Упоротый алгоритм? Сама сущность? Или сам указатель, который оказался волшебным?


"если ты потерял контроль - ты можешь пострадать. Но система этого может даже не заметить"(ц)
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
14.11.2011, 11:31 #57
Цитата Сообщение от Bers
тогда не говорите "когда угодно". говорите "когда можно".
когда угодно - это когда программист захочет
например, мы можем сохранить адрес символа в середине строки
но у этого символа нет имени, а указатель позволяет обратиться к нему, не проводя вычислений индекса
таких указателей можно создать сколько угодно, каждый знает свою позицию и у них удобные имена
0
Bers
Заблокирован
14.11.2011, 11:33 #58
Цитата Сообщение от accept Посмотреть сообщение
когда угодно - это когда программист захочет
Когда он может - сторонние механизмы не дадут.

или когда хочет - обращение к памяти, которую кто то уже освободил. Крэш.
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
14.11.2011, 11:39 #59
Цитата Сообщение от Bers
обращение к памяти, которую кто то уже освободил
а, типа какой-то другой программист ?
да, такое может быть
если код такой, что непонятно, на что указывает указатель
если же всё понятно, то при освобождении можно их обнулить
1
Bers
Заблокирован
14.11.2011, 11:43 #60
Цитата Сообщение от accept Посмотреть сообщение
а, типа какой-то другой программист ?
да, такое может быть
если код такой, что непонятно, на что указывает указатель
если же всё понятно, то при освобождении можно их обнулить
итого: пох на ивариант класса. Типа мы в теме, спаггети нам жрать не впервой!
0
14.11.2011, 11:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2011, 11:43
Привет! Вот еще темы с ответами:

Для чего нужны callback-функции - C++
Для чего нужны callback-функции? И можно привести какой-нибуль пример по их использованию.

Для чего нужны вложенные структуры? - C++
Скажите пожалуйста для чего нужны вложенные структуры и где их используют?

для чего нужны хеш таблицы? - C++
для чего нужны хеш таблицы? если есть массивы )

try catch throw для чего нужны? - C++
Для чего нужны эти операторы? Линканите пожалуйста статью, где доходчиво объяснено их применение, в разных вариантах (например я видел...


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

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

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