|
22 / 22 / 4
Регистрация: 07.11.2011
Сообщений: 154
|
|
Понимание для чего вообще нужны указатели?12.11.2011, 20:12. Показов 33972. Ответов 112
Метки нет (Все метки)
Сейчас будет чистый мой тупняк. Слабонервным дальше не читать. Итак, для чего вообще нужны указатели? Я вот не пойму, зачем их надо было вообще придумывать??? Не понимаю их конкретной пользы, смысла. Кто-нибудь может по-человечески объяснить?
1
|
|
| 12.11.2011, 20:12 | |
|
Ответы с готовыми решениями:
112
Для чего нужны указатели?
Ссылки и указатели, для чего нужны те и другие? |
|
Заблокирован
|
|
| 12.11.2011, 23:18 | |
|
1
|
|
|
22 / 22 / 4
Регистрация: 07.11.2011
Сообщений: 154
|
|
| 12.11.2011, 23:20 [ТС] | |
|
Спасибо) попробую только завтра-второй час ночи уже. Спасибо за помощь. Ещё вопрос-а размер строки-то как в таком объявлении указывать?)
0
|
|
|
Заблокирован
|
||
| 12.11.2011, 23:32 | ||
|
Но тебе нужно понять ещё одну не очевидную вещь: По адресу, на который указывает указатель может жить... другой указатель. И этот другой указатель уже может указывать ещё куда то. В твоём случае, строка это кусок памяти, который хранит кучку char`ов Поэтому, можно считать, что указатель , который указывает на кусок памяти, который хранит чары - это и есть строка. Ну то есть: char* в твоём отдельно взятом случае можно считать строкой. Можно даже сделать псевдоним для наглядности: typedef char* String; //теперь String- это тот же самый char* но воспринимается, как "строка" Тебе же нужно создать массив строк. Причем динамический. Тебе нужно попросить систему выделить тебе память под несколько штук строк. ты пишешь: String* МойМассив = new String[количество строк]; это будит равносильно: char** МойМассив = new char* [количество строк]; На самом деле МойМассив - это указатель, который указывает на кусок памяти, в котором живут другие указатели, которые уже в свою очередь указывают на строки.
1
|
||
|
22 / 22 / 4
Регистрация: 07.11.2011
Сообщений: 154
|
|
| 12.11.2011, 23:34 [ТС] | |
|
Спасибо вам, все толково объяснено.
0
|
|
|
Заблокирован
|
|||||||||||
| 13.11.2011, 00:33 | |||||||||||
|
Напишу вдогонку. Завтра может быть прочитаешь.
Адресная арифметика штука в общем то замороченная. И когда указатель начинает сидеть на указателе, и указателем погонять - запутаться в такой логике можно в три счета. Сложность такого проекта резко возрастает, соответственно количество потенциальных ошибок увеличивается. Поэтому, старайся по возможности всегда избегать ситуаций, когда у тебя один указатель указывает на другой. В с++ для этого есть множество решений. Один из самых простых вариантов - это замаскировать указатель так, что бы он воспринимался не как указатель, а как отдельный тип данных. Например "строка" - это строка, а не "массив чаров".
Это класс. Его можно снабдить удобными методами обработки данных. Можно сделать метод, который будит загружать данные в массив букв. Можно сделать метод, который будит все буквы превращать в строчные, или в заглавные. Ну и тп. Если ты ещё чуть чуть пройдёшься в этом направлении, то начнешь понимать, что такое классы, оценишь удобства, которые они предоставляют программистам. Ну а потом, ещё чуть чуть, и ты оценишь всю мощь и великолепие библиотеки STL Ну а там, ещё годик другой пройдёт, и начнёшь говорить всем, что указатели - фуфло, и нафег они не нужны ![]() Удачи.
1
|
|||||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 13.11.2011, 07:59 | |
Сообщение было отмечено как решение
Решение
С точки зрения прикладника указатели в С++, разумеется, не нужны. Поскольку у прикладника просто не встанет никогда такой задачи, в которой бы они понадобились. Но вот с точки зрения системщика без указателей не обойтись. Я уж не говорю о чистом С, но даже в С++, когда пишется какая-нибудь высокоуровневая обёртка над низкоуровневыми вещами - там указатели сплошь и рядом. Штука в том, что в джаве, например, сама виртуальная машина предоставляет прокладку между языком и средой (ОС) с исчерпывающим функционалом, и там нельзя сделать больше того, что разрешаете ВМ, но в то же время в большинстве случаев достаточно того, что она предоставляет. Потому там хватает высокоуровневых ссылок и сборщика мусора. С++ же язык с настолько широкими возможностями, что он предоставляет как написание программ на очень высоком уровне, так и низкоуровневое программирование, в котором без сырой работы с памятью никак.
Из всего этого вытекает, что нужность или ненужность указателей целиком и полностью зависит от того, на каком уровне пишет программист. И внутри всех языков, которые не предоставляют указатели в чистом виде, всё равно происходит работа с памятью, и всё равно есть указатели, от этого никуда не уйти. Не будь указателей в С - не появилась бы Джава.
4
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||
| 13.11.2011, 08:39 | ||
легко сохранить адрес чего-нибудь, а потом туда обратиться, когда угодно при передаче указателя передаётся только то количество байт, которое требуется для хранения одного адреса благодаря этому массивы передаются в функции очень быстро, не делается копия всех элементов, чтобы просто его передать чтобы передать массив в функцию, начиная не с того элемента, который стоит у него в начале, а со второго, нужно просто переместить указатель на второй элемент с помощью арифметической операции
1
|
||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 13.11.2011, 10:43 | |
|
Диман56, память компьютера - это массив. Каждый элемент массива имеет номер. Начинается с нуля. В Интеле - это массив байтов.
Как ты понимаешь, номер - это целое число. Правильно его называть - адрес. Для хранения номеров-адресов можно объявить переменную. Это и будет переменная - указатель. А храниться в ней будут адреса данных. Как ты понимаешь, переменная - одна, а адреса в ней могут быть разные. Что дает нам доступ к разным переменным в памяти.
0
|
|
|
22 / 22 / 4
Регистрация: 07.11.2011
Сообщений: 154
|
|
| 13.11.2011, 11:30 [ТС] | |
|
Bers, спасибо вам огромное!!! Со структурами уже приходилось работать, поэтому второй вариант для меня более приемлемый) Тем более, мне нужно записывать ещё кое-какие данные о файле, поэтому юзать буду структуру.
0
|
|
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
||
| 13.11.2011, 15:36 | ||
|
отказ от указателей заставляет использовать вещи посложнее
2
|
||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 14.11.2011, 08:28 | |
|
alex_x_x, прикладной программист просто-напросто будет использовать библиотеки, в которых есть высокоуровневые обёртки для всего, что может ему понадобиться. В этих обёртках могут использоваться указатели (список, умный указатель и т.д.), но программисту об этом думать не приходится.
0
|
|
|
Заблокирован
|
|
| 14.11.2011, 09:10 | |
|
0
|
|
|
Заблокирован
|
|
| 14.11.2011, 09:12 | |
|
silent_1991, в qt есть все обёртки, но их редко кто использует, в cool reader'е или smplayer их например нет. В qt деревья используются и отношения сын-предок для контроля ресурсами и временем жизни, но в итоге это всё равно выливается в интенсивном использовании указателей в коде
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 14.11.2011, 09:17 | |
|
0
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||
| 14.11.2011, 10:21 | ||
чтобы не терять контроль, нужно писать небольшие процедуры
1
|
||
|
Заблокирован
|
||
| 14.11.2011, 10:26 | ||
|
Вопрос: кто решает "когда можно"? Упоротый алгоритм? Сама сущность? Или сам указатель, который оказался волшебным? "если ты потерял контроль - ты можешь пострадать. Но система этого может даже не заметить"(ц)
0
|
||
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||
| 14.11.2011, 11:31 | ||
например, мы можем сохранить адрес символа в середине строки но у этого символа нет имени, а указатель позволяет обратиться к нему, не проводя вычислений индекса таких указателей можно создать сколько угодно, каждый знает свою позицию и у них удобные имена
0
|
||
|
Заблокирован
|
||
| 14.11.2011, 11:33 | ||
|
или когда хочет - обращение к памяти, которую кто то уже освободил. Крэш.
0
|
||
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||
| 14.11.2011, 11:39 | ||
да, такое может быть если код такой, что непонятно, на что указывает указатель если же всё понятно, то при освобождении можно их обнулить
1
|
||
|
Заблокирован
|
|
| 14.11.2011, 11:43 | |
|
0
|
|
| 14.11.2011, 11:43 | |
|
Помогаю со студенческими работами здесь
60
Для чего нужны и зачем использовать smart-указатели? Что за драйвера такие, для чего они и нужны ли они вообще? С чего начать для понимание PHP
Понимание звуковой волны , да и вообще волн в целом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|