Диман56
22 / 22 / 0
Регистрация: 07.11.2011
Сообщений: 154
|
|
#1 | |
Понимание для чего вообще нужны указатели? - C++12.11.2011, 20:12. Просмотров 24145. Ответов 112
Метки нет Все метки)
(
Сейчас будет чистый мой тупняк. Слабонервным дальше не читать. Итак, для чего вообще нужны указатели? Я вот не пойму, зачем их надо было вообще придумывать??? Не понимаю их конкретной пользы, смысла. Кто-нибудь может по-человечески объяснить?
1
|
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
12.11.2011, 20:12 |
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Понимание для чего вообще нужны указатели? (C++):
112
Для чего нужны указатели? - C++
Ссылки и указатели, для чего нужны те и другие? - C++ Для чего нужны и зачем использовать smart-указатели? - C++ Для чего нужны интерфейсы? - C++
|
silent_1991
![]() |
|
13.11.2011, 07:59 | #46 |
![]()
С точки зрения прикладника указатели в С++, разумеется, не нужны. Поскольку у прикладника просто не встанет никогда такой задачи, в которой бы они понадобились. Но вот с точки зрения системщика без указателей не обойтись. Я уж не говорю о чистом С, но даже в С++, когда пишется какая-нибудь высокоуровневая обёртка над низкоуровневыми вещами - там указатели сплошь и рядом. Штука в том, что в джаве, например, сама виртуальная машина предоставляет прокладку между языком и средой (ОС) с исчерпывающим функционалом, и там нельзя сделать больше того, что разрешаете ВМ, но в то же время в большинстве случаев достаточно того, что она предоставляет. Потому там хватает высокоуровневых ссылок и сборщика мусора. С++ же язык с настолько широкими возможностями, что он предоставляет как написание программ на очень высоком уровне, так и низкоуровневое программирование, в котором без сырой работы с памятью никак.
Из всего этого вытекает, что нужность или ненужность указателей целиком и полностью зависит от того, на каком уровне пишет программист. И внутри всех языков, которые не предоставляют указатели в чистом виде, всё равно происходит работа с памятью, и всё равно есть указатели, от этого никуда не уйти. Не будь указателей в С - не появилась бы Джава.
4
|
accept
4829 / 3250 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
|
|
13.11.2011, 08:39 | #47 |
![]() легко сохранить адрес чего-нибудь, а потом туда обратиться, когда угодно при передаче указателя передаётся только то количество байт, которое требуется для хранения одного адреса благодаря этому массивы передаются в функции очень быстро, не делается копия всех элементов, чтобы просто его передать чтобы передать массив в функцию, начиная не с того элемента, который стоит у него в начале, а со второго, нужно просто переместить указатель на второй элемент с помощью арифметической операции
1
|
ValeryLaptev
![]() 1047 / 826 / 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
бжни
2454 / 1659 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
13.11.2011, 15:36 | #50 |
не понял, в с++ обходится без указателей значительно сложнее, чем ими пользоваться
отказ от указателей заставляет использовать вещи посложнее
2
|
silent_1991
![]() |
|
14.11.2011, 08:28 | #51 |
alex_x_x, прикладной программист просто-напросто будет использовать библиотеки, в которых есть высокоуровневые обёртки для всего, что может ему понадобиться. В этих обёртках могут использоваться указатели (список, умный указатель и т.д.), но программисту об этом думать не приходится.
0
|
Заблокирован
|
|
14.11.2011, 09:10 | #52 |
0
|
Заблокирован
|
|
14.11.2011, 09:12 | #53 |
silent_1991, в qt есть все обёртки, но их редко кто использует, в cool reader'е или smplayer их например нет. В qt деревья используются и отношения сын-предок для контроля ресурсами и временем жизни, но в итоге это всё равно выливается в интенсивном использовании указателей в коде
0
|
taras atavin
3887 / 1761 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
|
|
14.11.2011, 09:17 | #54 |
0
|
accept
4829 / 3250 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
|
|
14.11.2011, 10:21 | #55 |
![]() чтобы не терять контроль, нужно писать небольшие процедуры
1
|
Заблокирован
|
|
14.11.2011, 10:26 | #56 |
тогда не говорите "когда угодно". говорите "когда можно".
Вопрос: кто решает "когда можно"? Упоротый алгоритм? Сама сущность? Или сам указатель, который оказался волшебным? "если ты потерял контроль - ты можешь пострадать. Но система этого может даже не заметить"(ц)
0
|
accept
4829 / 3250 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
|
|
14.11.2011, 11:31 | #57 |
![]() например, мы можем сохранить адрес символа в середине строки но у этого символа нет имени, а указатель позволяет обратиться к нему, не проводя вычислений индекса таких указателей можно создать сколько угодно, каждый знает свою позицию и у них удобные имена
0
|
Заблокирован
|
|
14.11.2011, 11:33 | #58 |
Когда он может - сторонние механизмы не дадут.
или когда хочет - обращение к памяти, которую кто то уже освободил. Крэш.
0
|
accept
4829 / 3250 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
|
|
14.11.2011, 11:39 | #59 |
![]() да, такое может быть если код такой, что непонятно, на что указывает указатель если же всё понятно, то при освобождении можно их обнулить
1
|
Заблокирован
|
|
14.11.2011, 11:43 | #60 |
0
|
14.11.2011, 11:43 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
14.11.2011, 11:43 |
Привет! Вот еще темы с ответами:
60
Для чего нужны вложенные структуры? - C++ для чего нужны хеш таблицы? - C++ try catch throw для чего нужны? - C++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |