|
22 / 22 / 4
Регистрация: 07.11.2011
Сообщений: 154
|
|
Понимание для чего вообще нужны указатели?12.11.2011, 20:12. Показов 34662. Ответов 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 / 3287 / 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 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||
| 14.11.2011, 10:21 | ||
чтобы не терять контроль, нужно писать небольшие процедуры
1
|
||
|
Заблокирован
|
||
| 14.11.2011, 10:26 | ||
|
Вопрос: кто решает "когда можно"? Упоротый алгоритм? Сама сущность? Или сам указатель, который оказался волшебным? "если ты потерял контроль - ты можешь пострадать. Но система этого может даже не заметить"(ц)
0
|
||
|
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||
| 14.11.2011, 11:31 | ||
например, мы можем сохранить адрес символа в середине строки но у этого символа нет имени, а указатель позволяет обратиться к нему, не проводя вычислений индекса таких указателей можно создать сколько угодно, каждый знает свою позицию и у них удобные имена
0
|
||
|
Заблокирован
|
||
| 14.11.2011, 11:33 | ||
|
или когда хочет - обращение к памяти, которую кто то уже освободил. Крэш.
0
|
||
|
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||
| 14.11.2011, 11:39 | ||
да, такое может быть если код такой, что непонятно, на что указывает указатель если же всё понятно, то при освобождении можно их обнулить
1
|
||
|
Заблокирован
|
|
| 14.11.2011, 11:43 | |
|
0
|
|
| 14.11.2011, 11:43 | |
|
Для чего нужны и зачем использовать smart-указатели? Что за драйвера такие, для чего они и нужны ли они вообще? С чего начать для понимание PHP
Понимание звуковой волны , да и вообще волн в целом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|
|
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время?
Никакой пенсии. Никакого нового. . .
|
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю
Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы
Кратко. . .
|
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем
**Полевые заметки о двухнедельной совместной работе**. . .
|
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|