Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, вот программа подсчитывающая количество символов в строке введённой пользователем, помогите разобраться с указателями, не понимаю что происходит в двух строках Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2013, 15:20 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
asupviking, в отладчике прогонял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2013, 15:28 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
asupviking, Код: plaintext 1. Что сказал используемый учебник про оператор ++? Код: plaintext 1. "Вывести в поток cout разность pbufer и bufer". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2013, 15:30 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
m_Sla, нет не прогонял, я им ещё пока не пользуюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2013, 15:36 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
asupvikingm_Sla, нет не прогонял, я им ещё пока не пользуюсь.ну и зря ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2013, 16:20 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
asupviking Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2013, 19:44 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
Вообще, это while(*pbufer) pbufer++; Обычно пишется так: while(*pbufer++); Собственно за это мы и любим c/c++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2013, 19:48 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
Abstraction, книга говорит что оператор ++ это оператор инкремента, он увеличивает значение на единицу, а так как pbufer указатель на char он будет смещаться на sizeof(char), и указывать на следующий элемент массива. AbstractionВывести в поток cout разность pbufer и bufer понятно что вывести в поток, не понятно то как происходит разность между указателем на на char и массивом символов, они же не числа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 08:37 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
asupvikingAbstractionВывести в поток cout разность pbufer и bufer понятно что вывести в поток, не понятно то как происходит разность между указателем на на char и массивом символов, они же не числа.Как говорили пифагорейцы, "всё сущее есть число". Чуть менее философски, всякая переменная примитивного типа может быть представлена числом из некоторого диапазона. В частности, любой указатель есть адрес в памяти. В Вашем случае имеем указатель на начало массива (адрес первого элемента) и указатель на первый элемент, равный '\0'. Разность указателей считается по тем же правилам, аналогичным правилам для суммы указателя и целого числа и в данном случае даёт нам количество символов в C-строке. авторВообще, это while(*pbufer) pbufer++; Обычно пишется так: while(*pbufer++);Варианты не эквивалентны. Если изначально *pbufer == '\0', в исходном варианте значение pbufer не изменится. Скорее уж Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 11:14 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
Abstraction, если я правильно понимаю, это всё можно условно представить следующим образом: например есть строка "HELLO". Адрес ячейки памяти в которой находится первый символ "H" равен 10, символ "E" - 11, символ "L" - 12, символ "L" - 13, символ "O" - 14, символ "\0" - 15. И получается что 15-10=5 символов, только в реале адреса в шестнадцатеричной форме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 12:24 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
asupvikingAbstraction, если я правильно понимаю, это всё можно условно представить следующим образом: например есть строка "HELLO". Адрес ячейки памяти в которой находится первый символ "H" равен 10, символ "E" - 11, символ "L" - 12, символ "L" - 13, символ "O" - 14, символ "\0" - 15. И получается что 15-10=5 символов, только в реале адреса в шестнадцатеричной форме ."Шестнадцатеричная форма" - это просто форма записи числа. "Само по себе" число не имеет никакой формы - скажем, число 18 можно писать "18", "0x12", "восемнадцать", "10010b", "1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1", ещё как угодно - это одно и то же число. Шестнадцатеричная форма удобна для понимания того, какие биты чему равны, поэтому отладчики обычно представляют значения адресов в ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 12:51 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
Abstraction , ясно, спасибо за объяснения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 13:10 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
asupvikingAbstraction, книга говорит что оператор ++ это оператор инкремента, он увеличивает значение на единицу, а так как pbufer указатель на char он будет смещаться на sizeof(char), и указывать на следующий элемент массива. AbstractionВывести в поток cout разность pbufer и bufer понятно что вывести в поток, не понятно то как происходит разность между указателем на на char и массивом символов, они же не числа. Эта операция производится с двумя указателями. Первый указатель по объявленному типу, второй -- массив, но массив всегда в С и С++ без явного указания может быть приведён к типу "указатель на первый элемент этого массива", что тут и происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 15:24 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
Abstraction while(*pbufer++);Варианты не эквивалентны. Если изначально *pbufer == '\0', в исходном варианте значение pbufer не изменится. Скорее уж Код: plaintext 1. [/quot] Да, спасибо, проглядел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 15:25 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
asupvikingAbstraction, если я правильно понимаю, это всё можно условно представить следующим образом: например есть строка "HELLO". Адрес ячейки памяти в которой находится первый символ "H" равен 10, символ "E" - 11, символ "L" - 12, символ "L" - 13, символ "O" - 14, символ "\0" - 15. И получается что 15-10=5 символов, только в реале адреса в шестнадцатеричной форме. В реале адреса в двоичной форме, но это не имеет никакого значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 15:26 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
MasterZiv, спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 15:54 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
авторОбычно пишется так: while(*pbufer++); Собственно за это мы и любим c/c++. А "мы" - это кто? И почему на "нас" надо равняться? Эта конструкция выглядит высокооптимизированной, но никто не сказал, что она таковой будет выглядеть для компилятора. И никто не сказал что только с ней компилятор сможет сделать самый номральный код; мы лишь подразумеваем, что нам этого хотелось бы, и надеемся. Реально, человеку, который учит си и находится на этапе "а что такое ++ для указателя?", я бы не советовал использовать этот ад. Он что такое pbufer++ не может понять, а вы ему рекомендуете *pbufer++. Путь пользуется простыми иснтрукциями. Умение составлять из них цепочки придет само собой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2013, 16:05 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
chabapok, Это идиома, а не оптимизация. Этот прием нужно знать с пеленок, иначе не сможешь читать чужие исходники, а именно в этом состоит 90% всей работы программиста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2013, 16:12 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
Ну замечательно, и до них дело дойдет, кто ж спорит. однако, если взглянуть на топик со стороны, то выглядет старанно: пришел человек спросить что такое pbufer++, а ему сразу советуют *pbufer++. Пригодится, мол. Очевидно, это нарушает порядок вещей, и поэтому такой совет он все равно проигнорирует. Постойте! Дайте же ему хотя бы текущее разгрести. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2013, 16:56 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
chabapokНу замечательно, и до них дело дойдет, кто ж спорит. однако, если взглянуть на топик со стороны, то выглядет старанно: пришел человек спросить что такое pbufer++, а ему сразу советуют *pbufer++. Пригодится, мол. Очевидно, это нарушает порядок вещей, и поэтому такой совет он все равно проигнорирует. Постойте! Дайте же ему хотя бы текущее разгрести. Я не говорил, что пригодится, и что надо пользоваться. Я говорил, что обычно пишут так. например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2013, 21:04 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
авторА "мы" - это кто? И почему на "нас" надо равняться? Это не "мы", а программисты на С. (и С++). Это лаконичные языки, мощные, в которых в единице кода (строчке) можно выразить очень много. Они таковы по своей натуре, с рождения. Ну и ровняться ни на что не надо, надо просто, если хочешь писать на каком-то языке, его знать и уметь применять. Оно конечно, надо знать меру, но для С-шника подобный код хотя бы должен не вызывать затруднений в чтении. авторЭта конструкция выглядит высокооптимизированной, но никто не сказал, что она таковой будет выглядеть для компилятора. И никто не сказал что только с ней компилятор сможет сделать самый номральный код; мы лишь подразумеваем, что нам этого хотелось бы, и надеемся. Оптимизация тут ни при чём. Оптимизирует компилятор. А здесь просто удобство написания кода. К скорости выполнения кода это никак не относится. авторРеально, человеку, который учит си и находится на этапе "а что такое ++ для указателя?", я бы не советовал использовать этот ад. Он что такое pbufer++ не может понять, а вы ему рекомендуете *pbufer++. Путь пользуется простыми иснтрукциями. Умение составлять из них цепочки придет само собой. Не хотите -- пишите на бейсике, кто ж вас заставляет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2013, 21:10 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
MasterZivНе хотите -- пишите на бейсике, кто ж вас заставляет...чёрт, +1, лучший комент за последние 2 года )))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2013, 21:14 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто лаконичные языки, мощные, в которых в единице кода (строчке) можно выразить очень много. Раз уж зашла речь: не подскажете как можно одной операцией получить частное и остаток деления двух целых чисел? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2013, 21:27 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovMasterZivЭто лаконичные языки, мощные, в которых в единице кода (строчке) можно выразить очень много. Раз уж зашла речь: не подскажете как можно одной операцией получить частное и остаток деления двух целых чисел? Как бы сложно, в С (и С++) нет возврата множественных значений, так что "одной операцией получить" не очень понятно, ГДЕ получить. На выходе функции такого быть не может, а где ещё -- только в переменных, наверное. Ну и "одной операцией" -- тоже не понятно. Одна операция -- деление, другая -- получение остатка от деления. Видимо, имелось в виду -- одной строкой кода. Тогда что-то в этом роде: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2013, 22:25 |
|
||
|
Вопрос по указателям
|
|||
|---|---|---|---|
|
#18+
MasterZivНу и "одной операцией" -- тоже не понятно. Одна операция -- деление, другая -- получение остатка от деления. Для интеловского процессора это одна операция. Но таки да: он-то может вернуть результат сразу в двух регистрах, чего в С не добиться. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2013, 22:38 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=82&tid=2020387]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 161ms |

| 0 / 0 |
