Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 4

double*p показать, что операция p++ передвигает указатель по памяти на определенное кол-во байт впарво

24.12.2020, 18:28. Показов 4974. Ответов 81
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
double*p показать, что операция p++ передвигает указатель по памяти на определенное кол-во байт впарво
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2020, 18:28
Ответы с готовыми решениями:

double*p показать, что операция p++ передвигает указатель по памяти на определенное кол-во байт впарвл
double*p показать, что операция p++ передвигает указатель по памяти на определенное кол-во байт впарвл

Как написать на masm под х86 функцию поиска кол-ва вхождений последовательности байт в большом массиве байт?
Привет! В общем читаю я файл (большой) и хочу найти кол-во вхождений в этот файл некоторой последовательности байт, допустим "AC DF...

Нюансы синтаксиса: запись double *array - это указатель или что-то иное?
double *array * что это указатель или что?

81
01.01.2021, 17:18
Студворк — интернет-сервис помощи студентам

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Справедливости ради, ответвление началось из кода, который содержит ошибку. На ошибку указали, но автор кода это не принял. Дальше начались попытки объяснить ситуацию, конечно у каждого в меру своей терпимости.
Попытки "щелкнуть по носу", тут случились гораздо позже обозначенного момента, т.е. когда суть спора отошла на второй план, а уже стоял вопрос принципа: "прав я или не прав".
DrOffset, это далеко не первый случай. Я не против ненавязчивого замечания, хотя предпочитаю (по большей части) положить свой код. Тут хоть и новичковский раздел, но если кто-то не просит явно разжевать (особенно ТС), то в ряде случаев вполне можно рассчитывать на понятливость читателя. Я полагаю, что то что хотел показать Catstail, и то как он это набрал в каком-то конкретном случае, это разные вещи. Я собственно и попытался остановить действо длиной в пол жизни. Вы подключились помочь и это не страшно. Еще десяток постов, это уже мелочь)

0
01.01.2021, 17:22

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Я полагаю, что то что хотел показать Catstail, и то как он это набрал в каком-то конкретном случае, это разные вещи.
Я с этим согласен. Это видно из того, что он говорил.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Вы подключились помочь и это не страшно.
Мой интерес в том, чтобы все поняли друг друга правильно. Я поэтому подключился.

0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
01.01.2021, 17:36
Цитата Сообщение от DrOffset Посмотреть сообщение
Есть реализации, где адрес - это пара чисел. Или, где адрес - это число, но в регистр для данных его загрузить нельзя, не поместится. Максимальная разрядность целого числа на такой платформе меньше, чем разрядность указателя.
- пара чисел - да, сталкивался (сегмент и смещение). А вот второй случай интереснее. Какой процессор имеется в виду?

Добавлено через 7 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
В общем смысле это дает возможность писать переносимые программы.
- по переносимости у меня опыт весьма ограничен. Однажды переносил C-шный код из 32-х битной среды в 64-х битную. В двух местах поправил ерунду какую-то (уже не помню, это было в начале 2000-х) - и все заработало. Правда код был не особо велик - простенький TCP-сервер. Он потом работал года 3-4 без проблем. Это я к тому, что не стоит драматизировать проблемы переноса
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.01.2021, 17:38
Цитата Сообщение от Catstail Посмотреть сообщение
Какой процессор имеется в виду?
Из известных мне - это платформы из серии IBM i.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2021, 17:38
Catstail, вот статейка
https://www.ixbt.com/cpu/cpu-bitness.shtml
похожая на то. Там есть, о "урезанных" адресных регистрах.
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.01.2021, 17:49
Цитата Сообщение от Catstail Посмотреть сообщение
Это я к тому, что не стоит драматизировать проблемы переноса
Драматизировать, конечно, не стоит. Но заведомо пессимизировать код тоже. Если мы знаем как сделать правильно, нужно сразу делать правильно. Одно дело перевести код, который способен осилить один разработчик за вечер, другое дело переводить 10 миллинов строк кода на новую платформу. Шутка заключается в том, что разработчик заведомо не может знать будет ли его код являться частью такой огромной системы или нет. В нашем случае все тоже начиналось в 2000х и люди тогда даже не думали, что система настолько вырастет.

Добавлено через 5 минут
Еще одна шутка в том, что новоприбывшие разработчики смотрят старый код. И... делают так же. В итоге порочная практика распространилась на весь проект. Ну а что, работает же?
Третья шутка в том, что когда мы это делали, у нас не было доступного развитого статического анализатора, который умеет работать с ошибками многоплатформенности. PWS был доступен тогда только для Win, а clang analizer был еще в зачаточном состоянии.
Допустим был бы PWS, но он стоит денег. Время программистов стоит денег. Убытки в несколько человеколет только потому, что в свое время кто-то поленился написать uintptr_t вместо int. Естественно ошибки были не только в этом, но все-таки. Это очень показательно.
3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
01.01.2021, 18:09
IGPIGP, очень интересная статья! Огромное спасибо!

Добавлено через 30 секунд
DrOffset, верно, конечно...

Добавлено через 6 минут
Цитата Сообщение от Catstail Посмотреть сообщение
Максимальная разрядность целого числа на такой платформе меньше, чем разрядность указателя.
- представить могу, но мне не хватает воображения понять, для чего это нужно.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.01.2021, 18:19
Цитата Сообщение от Catstail Посмотреть сообщение
для чего это нужно
Ну например, чтобы при наличии 32-разрядного в целом набора инструкций иметь больше памяти.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
01.01.2021, 18:21
Цитата Сообщение от DrOffset Посмотреть сообщение
Ну например, чтобы при наличии 32-разрядного в целом набора инструкций иметь больше памяти.
- за счет обработки более коротких чисел?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2021, 18:23
Цитата Сообщение от Catstail Посмотреть сообщение
представить могу, но мне не хватает воображения понять, для чего это нужно.
Процессор стоит денег, например. Кэш первого уровня достаточно дорог. Контроллер памяти может обеспечить доступ за 2 такта, получая требуемое адресное пространство. Кстати говоря, то что физически целый тип может быть уже чем "виртуально", это же тоже о гарантиях системы. Мы располагаем такой гарантией. А для указателей для меня важно лишь одно. Обратимо ли преобразование целого в указатель и обратно. И коль скоро система это берет на себя, предоставляя uintptr_t, - грешно не воспользоваться. Если вы помните, я положил код, где использован специальный тип для разности указателей. И свечи целы и монашки сыты)
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.01.2021, 18:37
Catstail, я имею в виду, что адресное пространство может быть больше физически за счет специализированного набора инструкций для адресации.

Добавлено через 4 минуты
Catstail, почитайте здесь: https://www.wikiwand.com/en/Memory_address
Word size is a characteristic given to computer architecture. It denotes the number of bits that a CPU can process at one time. Modern processors, including embedded systems, usually have a word size of 8, 16, 24, 32 or 64 bits; most current general purpose computers use 32 or 64 bits. Many different sizes have been used historically, including 8, 9, 10, 12, 18, 24, 36, 39, 40, 48 and 60 bits.

Very often, when referring to the word size of a modern computer, one is also describing the size of address space on that computer. For instance, a computer said to be "32-bit" also usually allows 32-bit memory addresses; a byte-addressable 32-bit computer can address 232 = 4,294,967,296 bytes of memory, or 4 gibibytes (GiB). This allows one memory address to be efficiently stored in one word.

However, this does not always hold true. Computers can have memory addresses larger or smaller than their word size. For instance, many 8-bit processors, such as the MOS Technology 6502, supported 16-bit addresses— if not, they would have been limited to a mere 256 bytes of memory addressing. The 16-bit Intel 8088 and Intel 8086 supported 20-bit addressing via segmentation, allowing them to access 1 MiB rather than 64 KiB of memory. All Intel Pentium processors since the Pentium Pro include Physical Address Extensions (PAE) which support mapping 36-bit physical addresses to 32-bit virtual addresses. Many early processors held 2 addresses per word, such as 36-bit processors.
1
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
01.01.2021, 18:41
Цитата Сообщение от Catstail Посмотреть сообщение
Но какое отношение это имеет к практическому программированию - непонятно.
Ваша логика скачет как лошадки в голове моей подружки.

Изначально речь шла не о сиюминутном практическом применении.
Речь шла о сути вещей:
Цитата Сообщение от Catstail Посмотреть сообщение
это в сущности - обычное целое.
Вы ведь понимаете значение словосочетания "в сущности" ?
Ну так вот, в сущности, адрес не обязан быть ни обычным, ни целым, ни числом.


В том, что касается практических профитов: если вы понимаете, что адрес не обязан быть "просто целым числом", то вы не станете запихивать его лонг, и думать, что это - нормально.
0
01.01.2021, 18:45

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
IBM i
Здесь, разумеется, имелась в виду серия IBM System i. С телефона не очень удобно писать.
IBM i - это ОС.

0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
01.01.2021, 21:23
eva2326, да-да адрес - это банан, лошадь скачет... Успокойтесь.

Добавлено через 18 минут
IGPIGP, потихоньку "градус понизился". Адрес - это все-таки число (а не банан); по крайней мере в современных системах. То, что его "нехорошо" загружать в знаковый long - принимаю. Дискуссия закончилась бы довольно быстро, если бы некоторые участники не начали бы меня поучать в хамоватой манере (я этого не люблю).

DrOffset, Да, в 8-битных МП 16-битный адрес в al не загрузишь. Я не знаю толком архитектуру 8080, но думаю, что арифметика 16-битных данных там есть. А раз так, то и адрес может представлен в таком виде. Так?

Теперь вообразим некую систему, в которой память линейная (не сегментированная) и очень большого объема. А расхожий регистр не способен вместить адрес. Поскольку адрес - это все-таки число, то вот интересно, как бедная printf будет реализовывать формат %p ?
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.01.2021, 21:26
Цитата Сообщение от Catstail Посмотреть сообщение
как бедная printf будет реализовывать формат %p
Так же, как сейчас она реализует софт-эмуляцию типа int128. Т.е. по частям с учетом переноса разряда в строку, а потом выводим.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
01.01.2021, 21:31
DrOffset, это понятно. Но откуда эти части возьмутся? Если адрес в регистр не грузится? Если, к примеру в один не грузится, а в пару - грузится, то и мне никто не мешает представлять адрес длинным целым.

Короче, если printf с этой проблемой справиться может, то и я могу. А значит, никто не запрещает считать адрес просто длинным числом.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.01.2021, 21:47
Цитата Сообщение от Catstail Посмотреть сообщение
А значит, никто не запрещает считать адрес просто длинным числом.
Вообще это вопрос философский. Любое состояние, в принципе, можно считать очень длинным числом. Например мы можем взять Войну и Мир Толстого, перевести все символы оттуда в коды, коды записать подряд, и заявить, что Война и Мир - это просто огромное целое число. Вопрос опять упирается в уровень абстракции наших таких рассуждений.
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
01.01.2021, 21:54
DrOffset, отождествить литературное произведение с целым числом можно. Но это не очень конструктивно (если не сказать - просто бесполезно). А отождествление адреса с числом совершенно естественно.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.01.2021, 22:12
Цитата Сообщение от Catstail Посмотреть сообщение
Но это не очень конструктивно (если не сказать - просто бесполезно).
Это совсем не бесполезно, т.к. оцифровка литературных произведений именно этим и занимается

Цитата Сообщение от Catstail Посмотреть сообщение
А отождествление адреса с числом совершенно естественно.
Я лишь хотел показать, что все сильно зависит от контекста. Например, иногда из-за такого отождествления у людей возникает желание использовать указатель для сравнения с другим указателем, забывая при этом, что для указателей не определена операция сравнения, если адреса находятся не в одном блоке памяти. В отличие от обычных чисел, для которых работают законы арифметики.
Цитата Сообщение от https://en.cppreference.com/w/cpp/language/operator_comparison
Although the results of comparing pointers of random origin (e.g. not all pointing to members of the same array) is unspecified, many implementations provide strict total ordering of pointers, e.g. if they are implemented as addresses within continuous virtual address space. Those implementations that do not (e.g. where not all bits of the pointer are part of a memory address and have to be ignored for comparison, or an additional calculation is required or otherwise pointer and integer is not a 1 to 1 relationship), provide a specialization of std::less for pointers that has that guarantee.
Поэтому да, представлять адрес числом - это естественно. Но не значит, что всегда уместно.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
01.01.2021, 22:36
Цитата Сообщение от DrOffset Посмотреть сообщение
Я лишь хотел показать, что все сильно зависит от контекста. Например, иногда из-за такого отождествления у людей возникает желание использовать указатель для сравнения с другим указателем, забывая при этом, что для указателей не определена операция сравнения, если адреса находятся не в одном блоке памяти. В отличие от обычных чисел, для которых работают законы арифметики.
- я указатели не сравнивал...

Кстати, созрел вопрос: если загрузка указателя в long (со знаком!) - такой страшный грех, почему компилятор этого просто не запрещает? Ведь разработчикам компилятора сделать это - пара пустых!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.01.2021, 22:36

Функция, принимающая указатель и число байт и выделяющая память под указатель
Здравствуйте. Задача легкая, но почему-то завис Нужно написать функцию, принимающую указатель и число байт и выделяющую память под...

Зачем тут создается указатель p? И что за "странная" операция *p = *p = 1?
Здравствуйте. Ребят, очень нуждаюсь в помощи, помогите понять. Попался мне на мсдн код, в реализации которого вычисляются 20 чисел...

Почему на указатель в 64-разрядной системе выделяется 8 байт памяти, а в 32-разрядной системе - 4 байта?
Здравствуйте! Почему на указатель в 64-разрядной системе выделяется 8 байт памяти, а в 32-разрядной системе - 4 байта? С чем связано...

Как заставить программу принимать цепочку байт из оперативной памяти, в виде массива байт ?
В памяти процесса есть закодированный блок с байтами, есть адрес этого блока и размер. Есть так-же функция дешифровки этих байт, но она...

Как JVM понимает, что определенный объект занимает определенное количество байтов памяти?
Мой иначальный вопрос следующий - почему существует различие в механизме примитивных и ссылочных переменных? Почему примитивные переменные...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru