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

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

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

Author24 — интернет-сервис помощи студентам
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 функцию поиска кол-ва вхождений последовательности байт в большом массиве байт?
Привет! В общем читаю я файл (большой) и хочу найти кол-во вхождений в этот файл некоторой...

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

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

81
 Аватар для eva2326
1659 / 488 / 106
Регистрация: 17.05.2015
Сообщений: 1,497
31.12.2020, 16:04 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Catstail Посмотреть сообщение
значит, указатель в принципе непознаваем?
Вы опять перепутали "указатель" и "адрес".
Понятие указателя четко определено: тип данных, который хранит адрес.

Непознаваемым может быть "адрес".
На самом деле он познаваемый, но только на уровне конкретной реализации с++.
То бишь, когда речь идет о конкретной реализации в конкретном компиляторе.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
31.12.2020, 16:07 22
Цитата Сообщение от eva2326 Посмотреть сообщение
На самом деле он познаваемый, но только на уровне конкретной реализации с++.
- так я
и имею дело с конкретным компилятором. А не со сферическим конем в вакууме. Возможно компиляторы с непознаваемым адресом и существуют, но мне что-то не попадались. А вам?
0
 Аватар для eva2326
1659 / 488 / 106
Регистрация: 17.05.2015
Сообщений: 1,497
31.12.2020, 16:17 23
Цитата Сообщение от Catstail Посмотреть сообщение
Есть возражения?
Попробуйте))
Код
1 1 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 1 0 0 0 0 1 1 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 0 1 1 1 0 1 1 1 0 1
Добавлено через 3 минуты
Цитата Сообщение от Catstail Посмотреть сообщение
- так я
и имею дело с конкретным компилятором.
Не правда.
Если бы вы подразумевали конкретный компилятор, то вы бы привели ссылку на спецификацию, или какой либо другой нормативный документ с описанием сабжа.

Вместо этого вы привели код на языке с++, который якобы что-то там показывает.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
31.12.2020, 16:50 24
Цитата Сообщение от eva2326 Посмотреть сообщение
Не правда. Если бы вы подразумевали конкретный компилятор, то вы бы привели ссылку на спецификацию, или какой либо другой нормативный документ с описанием сабжа.
- "неправда" пишется слитно. Я посмотрел ваши посты. В них практически отсутствуют ссылки на спецификации... Так вы на чем программируете? На "банановом компиляторе"?

Цитата Сообщение от eva2326 Посмотреть сообщение
Попробуйте))
- это нетрудно. Но что это даст вам? Берем, в hex-вид и дальше дизассемблер. И что?
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
31.12.2020, 17:18 25
Catstail, я бы просто обратил внимание на то, что вы с вашими собеседниками находясь на разных уровнях абстракции. Вы ведете речь о конкретной платформе и тех экспериментах, которые можете на ней поставить, а ваши оппоненты говорят о языке С++ как об отвязанной абстракции от платформы. Стандарт языка C++ описывает некоторую абстрактную машину, общее пресечение множеств платформ, которое можно использовать, чтобы сделать конкретную реализацию. С++ специально отвязан от конкретной платформы, чтобы быть переносимым. Отсюда возникают некоторые ограничения. Например упомянутые указатели на разные типы, которые, чтобы соблюсти переносимость в абстрактной машине С++ не конвертируются друг в друга, потому что существуют платформы, на которых разные данные могут находиться на разных адресных шинах. Тоже самое касается преобразования в одно целое число. С точки зрения С++ как языка, а не как его конкретной реализации, такого преобразования не существует, потому что С++ должно быть возможно реализовать для платформы, на которой это правда.
Очень просто на самом деле разобраться в этом, обратив внимание на то, какие преобразования в С++ оставлены неявными, а какие нужно делать принудительно. Все неявные преобразования условно выполнимы на всем множестве конкретных платформ, для которых возможно реализовать С++. А явные преобразования обращают внимание программиста на то, что он делает и согласовать это с конкретной платформой, на которой все это будет работать.

Поэтому, я бы не спорил с тем, что на определенных платформах значение указателя - это некоторое число, но спорил бы с тем, что С++, как язык, это гарантирует. Исходя из стандарта С++ и вышеизложенных соображений.
1
 Аватар для eva2326
1659 / 488 / 106
Регистрация: 17.05.2015
Сообщений: 1,497
31.12.2020, 18:15 26
Цитата Сообщение от Catstail Посмотреть сообщение
- "неправда" пишется слитно.
Ваше исходное заявление:
Цитата Сообщение от Catstail Посмотреть сообщение
- так я
и имею дело с конкретным компилятором.
Это - не правда, а ложь.

Цитата Сообщение от Catstail Посмотреть сообщение
это нетрудно.
Ну так и где моё предсказание ????

Цитата Сообщение от Catstail Посмотреть сообщение
Я смогу. Например, предскажу, что будет, если исполнить этот код на определенном процессоре. И не ошибусь. Есть возражения?
У меня есть возражение !!!
Я вам последовательность предоставила, а предсказания так и не получила!

Вы меня обманули !!!!
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
31.12.2020, 18:22 27
DrOffset, Вы совершенно правы! Началу спора положил невинный вопрос ТС. А потом на меня набросились пуристы... Я давно понял, что мы с ними - на разных уровнях абстракции. Но когда мне говорят: "Вы неправы, т.к. путаете понятия", я, естественно, хочу разобраться. Если я ошибаюсь, чем мне грозит ошибка? К примеру, когда мне говорят не путай съедобные грибы и поганки, тут цена ошибки совершенно очевидна. Чем же я рискую, если буду считать, что указатель - это адрес, а адрес - это число? Да ничем! А если выяснится, что в каком-либо компьютере будущего адрес - это банан, то я не упаду в обморок и приму это к сведению. С наступающим Вас!
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
31.12.2020, 18:39 28
Цитата Сообщение от eva2326 Посмотреть сообщение
Вы меня обманули !!!!
- просто отвлекался. Для процессора x86 ваша последовательность из 50 битов - бессмысленна. Ибо:

11010110011100011110000110101010001010000111011101 = D6 71 E1 AA 28 77 (два последних бита отброшены)

Берем онлайн дизассемблер и смотрим, что эта последовательность означает для x86 (на картинке). Первый байт не представляет нормальной команды. Дальше идет условный переход по адресу... Если же условие не соблюдено, то 8-битный аккумулятор сбрасывается по адресу es:[edi]. И еще два байта не представляют легальной команды x86 (распознаны как данные). Есть претензии?
Миниатюры
double*p показать, что операция p++ передвигает указатель по памяти на определенное кол-во байт впарво  
0
 Аватар для eva2326
1659 / 488 / 106
Регистрация: 17.05.2015
Сообщений: 1,497
31.12.2020, 20:00 29
Цитата Сообщение от Catstail Посмотреть сообщение
Чем же я рискую, если буду считать, что указатель - это адрес, а адрес - это число?
Чем рискуют люди, которые думают, что земля плоская?

Цитата Сообщение от Catstail Посмотреть сообщение
А если выяснится, что в каком-либо компьютере будущего адрес - это банан, то я не упаду в обморок и приму это к сведению.
Так это уже происходит.
Просто вы этого ещё не поняли.
Не сумев осознать, что адрес - это банан, вы рискуете так и не суметь понять, что кроме бананов, есть ещё и кокосы.


Например:
Указатель-на-функцию-член принципиально отличается от указателя-на-данные.
Различия настолько принципиально принципиальны, что их в принципе не корректно сравнивать.

А размеры указателей-на-функции-члены могут варьировать в зависисмости от строения их классов.

Например:
Использовалось ли наследование? А если использовалось, то какое? Обычное? Множественное? Виртуальное?

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


Например:
В простейшейм случае обычный указатель-на-функцию-член можно представить, как "смещение от начала класса".
Но в более сложных случаях компиляторы вынуждены добавлять в адрес дополнительную информацию - смещение относительно предков для случая с виртуальным наследованием (например)

Вот и получается, уже прямо сейчас, что некоторые адреса по своему устройству - более сложные штуки, нежели просто "целые числа".

Добавлено через 2 минуты
Цитата Сообщение от Catstail Посмотреть сообщение
Есть претензии?
По-моему, это какая то бессмыслица.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
31.12.2020, 20:24 30
Цитата Сообщение от eva2326 Посмотреть сообщение
Указатель-на-функцию-член принципиально отличается от указателя-на-данные.
Различия настолько принципиально принципиальны, что их в принципе не корректно сравнивать.
- можно конкретный пример?

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

Цитата Сообщение от eva2326 Посмотреть сообщение
компилятор может оперировать адресами с принципиально различным устройством.
- да вы приведите как выглядят эти "адреса с принципиально разным устройством"! Я понимаю, что вы имеете в виду. Но, вообще-то, речь шла про нативные типы (double, int). Их адрес - это просто число (номер байта начала в виртуальном адресном пространстве), нет? А указатели на сложные агрегаты данных - согласен, могут быть устроены сложнее (обычный адрес + флаги какие-нибудь) и что? Внутри адрес - это просто сигара просто число.


И, как я понял, к интерпретации битовой последовательности претензий нет?

Добавлено через 9 минут
Вообще объяснить - это сделать понятным. Что, в свою очередь, достигается разными приемами. Например, сведением новых понятий к уже известным. У вас же я замечаю противоположную тенденцию (была такая эпиграмма на одного поэта: "Поэт от слова внятного идет путем обратного. Чтоб из всего понятного все сделать непонятным" Почему-то вспомнилось )


Цитата Сообщение от eva2326 Посмотреть сообщение
Чем рискуют люди, которые думают, что земля плоская?
- Те, кто не планирует поездок дальше, чем на 500 км - ничем. Потом будет иметь место нарастающая ошибка. Но вы не ответили на мой вопрос: чем рискую я в описанном выше случае? Вы бы, что называется, "положили меня на обе лопатки", если бы сказали примерно так: представление о том, что адрес - это просто число, не позволит вам отъехать дальше, чем на 100 км от дома решать вот такие задачи *** и вот такие ***, а также такие ***. И я бы согласился. Если бы вы заполнили поля, отмеченные звездочками.

Добавлено через 3 минуты
Цитата Сообщение от eva2326 Посмотреть сообщение
По-моему, это какая то бессмыслица.
- с моей т.з. большая часть ваших нападок - это... как бы сказать помягче... неуместная распальцовка.
0
 Аватар для eva2326
1659 / 488 / 106
Регистрация: 17.05.2015
Сообщений: 1,497
31.12.2020, 21:14 31
Цитата Сообщение от Catstail Посмотреть сообщение
можно конкретный пример?
Как вы это себе представляете?
Вам код написать, который проиллюстрирует, что такие указатели принципиально несовместимы?
Или вслух почитать стандарт с++?

Или достаточно будет отослать к быстрым делегатам?

Цитата Сообщение от Catstail Посмотреть сообщение
Их адрес - это просто число (номер байта начала в виртуальном адресном пространстве), нет?
Я не знаю, как ещё донести эту мысль: адрес не обязан быть просто числом, и может быть чем угодно.

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

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

Но сейчас вы приходите в публичное поле, и заявляете будто бы адрес - это число.
А я заявляю, что это - не правда, а ложь.

Вы ссылаетесь на ассемблер, на дебаггер, на циферки в черно-белой консольке.
Я ссылаюсь на правила языка.

Некорректно судить о с++ глядя на ассм-выхлоп.
Это так же некорректно, как и судить об исходной программе, глядя на нолики и единички в отрыве от контекста.
Более того, не зная контекста, вы не знаете как правильно интерпритировать этот самый бинарный код.
Вы рискуете увидеть бессмыслицу, как если бы это был просто случайный набор из ноликов и единиц.

Добавлено через 1 минуту
Цитата Сообщение от Catstail Посмотреть сообщение
Но тут мы меняемся ролями: "смещение от начала класса" звучит не очень хорошо.
Не имеет значения.
В правилах нигде не сказанно, что там под капотом будет именно "смещение".
Там может быть всё, что угодно.

А вы по прежнему можете считать, что там будут "просто цифры", которые "просто по другому" интерпретируются компилятором.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2021, 00:04 32
Catstail, приветствую)
Цитата Сообщение от Catstail Посмотреть сообщение
C++
1
a1=(long int)p;
Вам не переспорить. Это не имеет смысла, потому, что тут не прощают даже неверно поставленного ударения. По сути вы выбрали не тот тип который бы выбрал С++ "непурист". То есть, тот кто считатет что плохое состояние природы это непогода а не погода с плохим состоянием. Такой непурист выбрал бы size_t или unsigned int , что в общем-то по размеру соответствует вашему long (если иметь ввиду множество неотрицательных (не очень отрицательных ) значений. Вот тут
https://en.cppreference.com/w/cpp/types/size_t
Цитата Сообщение от небожителей
std::size_t is the unsigned integer type of the result of the sizeof operator as well as the sizeof... operator and the alignof operator (since C++11).

The bit width of std::size_t is not less than 16.
(since C++11)
Notes

std::size_t can store the maximum size of a theoretically possible object of any type (including array). A type whose size cannot be represented by std::size_t is ill-formed (since C++14) On many platforms (an exception is systems with segmented addressing) std::size_t can safely store the value of any non-member pointer, in which case it is synonymous with std::uintptr_t.

std::size_t is commonly used for array indexing and loop counting. Programs that use other types, such as unsigned int, for array indexing may fail on, e.g. 64-bit systems when the index exceeds UINT_MAX or if it relies on 32-bit modular arithmetic.

When indexing C++ containers, such as std::string, std::vector, etc, the appropriate type is the member typedef size_type provided by such containers. It is usually defined as a synonym for std::size_t.
То есть, вы почти правы. Но вот это почти вам вынесут вместе с мозгом. Советую остановиться.
Я помню наши с вами споры. Многое изменилось с тех пор)
С Новым Годом!
0
DrOffset
01.01.2021, 00:49
  #33

Не по теме:

Цитата Сообщение от Catstail Посмотреть сообщение
С наступающим Вас!
С новым годом :)

0
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
01.01.2021, 09:34 34
IGPIGP, и Вас - с Новым годом! Необычайно приятен мне Ваш ответ! Да. Смиряюсь. Но не могу не вспомнить бессмертного А.П.Чехова. В "Скучной истории" (кажется) герой произносит фразу "Не представляю, как этот сухарь живет со своею женой". Можно перефразировать классика - не понимаю, как с такими представлениями о языке можно программировать с помощью конкретного компилятора.

Цитата Сообщение от eva2326 Посмотреть сообщение
Я не знаю, как ещё донести эту мысль: адрес не обязан быть просто числом, и может быть чем угодно.
- да, наконец дошло. Если говорить только о стандарте языка, то конечно. Но какое отношение это имеет к практическому программированию - непонятно. Осознание кривизны Земли для навигации - ключевой момент. А то, что адрес может быть чем угодно - что это мне даёт? Да ничего! В конкретных реализациях C/С++ адрес - это число. Даже если (как говорил бравый солдат Швейк), вы бы... Впрочем, стоп. Думаю, здесь уместно будет поставить точку в этой явно затянувшейся новогодней дискуссии! Если захотите еще обсудить что есть веревка - вервие простое глубокую философскую сущность понятий "адрес", "указатель", "переменная" и т.п. - к вашим услугам
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2021, 12:52 35
Catstail, мы живём в дискретном мире, где всё что не возьми - целое число. Да. Это набор нулей и единиц. Но язык С++ постоянно удаляется от предметной области - физической модели вычислительной системы в сторону построения некой абстрактной машины. То есть, понятие типа объекта размягчилось и сменилось понятием выражения. Понятие ссылки (способа доступа, в частности) сдаёт позицию понятию значения. В человеческой логике, значение - контекстно зависимый информационный набор связанный с физическим объектом. То есть, это способ интерпретации некоторой сущности существующей объективно (независимо от нашего сознания). В стандарте С++ значения это категории существующие независимо от чего бы то ни было, связанного с физикой системы.
Я надеюсь, что не подниму слишком большого шума, - на мелкий стараюсь не реагировать.
Однако, всё сказанное к тому, что недалеко то время, когда компилятор не даст вам ни какой гарантии о том, что значение указателя не связанного с каким либо объектом, сохраняется как некоторое значение. Это трудно представить, но задекларировать в стандарте - раз плюнуть.
Что касается контекста и значения в контексте, то в С есть указатель на char. Этот тип имеет целый набор значений с которыми он может быть связан.
1. Указатель - целое число для хранения представления адреса символа;
2. Указатель по п.1. для доступа к строке символов (реализуется на уровне библиотек, но это не важно, поскольку набор операций предоставляемый библиотеками типа string.h де-факто, стандартное свойство языка С).
3. Указатель для доступа к массиву char без терминатора (массиву, который запросто может содержать терминаторы внутри и не содержать оный в конце).
Последнее, это значение разделяемое системой и программистом. Ибо кроме программиста, размера ни кто не знает. То есть, значение высокого уровня может быть субъективно(!).
***
А внутренне, - в части представления, такой указатель содержит (всегда и независимо от инициализации или оптимизации кода, где целевого объекта фактически нет) целое число, которое язык позволяет использовать для доступа к объекту типа char (символу на данной системе), вне зависимости от контекстно зависимых значений более высокого уровня.
Хух... О чём тут спорить? - Oбовсём (слитно т.к. раздел форума как контекст присутствует). И это отличная причина, не делать этого. Даже самая сложная предметная логика, может быть описана простыми принципами. Но может быть и иначе и тогда только талмуд спасает праведную душу.


Добавлено через 1 час 4 минуты
Вот простая неточность, которая может вызвать возражение. Форма может быть любой, что прискорбно.
Цитата Сообщение от IGPIGP Посмотреть сообщение
А внутренне, - в части представления, такой указатель содержит (всегда и независимо от инициализации или оптимизации кода, где целевого объекта фактически нет) целое число, которое язык позволяет использовать для доступа к объекту типа char (символу на данной системе), вне зависимости от контекстно зависимых значений более высокого уровня.
Да. Существует значение представимое целочисленным литералом 0. Оно не должно проецироваться ни в какой адрес. Это исключение и я не упомянул о нём. И такой момент может поломать любую тему, уведя её в сторону.
Но само по себе, - наличие высокоуровневой абстракции "nullptr" как раз хороший пример, который показывает неизбежность присутствия таких вещей. Есть системы, где нулевой адрес существует физически и защитить этот ноль призван nullptr. Это тот случай, когда указатель не есть адрес, а есть отсутствие адреса. Спор о том, считать ноль адресом или нет, неразумен. Но факт есть факт - указатели это уникальный тип, имеющий в наборе значение которое интерпретируется как отсутствие значения. Представьте как славно было бы, если бы у всех целых типов было уникальное значение вроде "nothing". И именно указатели позволяют осуществить полноту такой логики. Но их заменили ссылками почти повсеместно и говорить о том, что это сделано из злонамеренных побуждений - риск прослыть конспирологом. Впрочем, в нормальных языках ссылки существуют как неконстантные объекты и их также можно занулять как и указатели. Я верю, что наступит день, когда С++ станет в ряд с такими языками. Подобное расширение для ссылок расширяет функциональность не влияя на совместимость с ранее написанным кодом. Борцы за безопасность могут придти в ярость, но им это просто необходимо (гормонально). Бог с ними)
И ещё по одной (фигурально, конечно)
2
Модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37457 / 20828 / 4281
Регистрация: 12.02.2012
Сообщений: 34,246
Записей в блоге: 14
01.01.2021, 13:14 36
Цитата Сообщение от IGPIGP Посмотреть сообщение
Однако, всё сказанное к тому, что недалеко то время, когда компилятор не даст вам никакой гарантии о том, что значение указателя не связанного с каким либо объектом, сохраняется как некоторое значение. Это трудно представить, но задекларировать в стандарте - раз плюнуть.
- почему же трудно представить? Можно представить. Но зачем его менять? Разве что из-за сборки мусора... Но я с этим смирюсь. (Кстати, при этом адрес останется числом! )

Вот еще пример в тему: чему равно значение переменной цикла сразу после завершения цикла? Пурист скажет: "надо читать стандарт!". А я скажу: не обязательно. Просто присваивайте переменной цикла нужное значение, а что там после цикла осталось - неважно! И не пользуйтесь тем, что там лежит, сразу после завершения цикла. Я при этом ничего не потеряю. А пурист пусть вычисляет, сколько ангелов разместится на кончике иглы, чему будет равно значение переменной х после выполнения следующего кода:

C++
1
2
x=6;
x=(++x++)+x;
и т.п. Пусть он вычисляет, а я скажу - у нормальных программистов такого в коде быть не должно.

Под занавес - две цитаты из классиков, которые мне близки: "Плюньте на совершенство, иначе вы не сдвинетесь с места и никогда не доберетесь до сути вещей" (Ж-П Сартр); "Не верь ничему, но сомневайся только в том, в чем стоит сомневаться" (Д.Пойа).
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2021, 13:33 37
Цитата Сообщение от Catstail Посмотреть сообщение
Вот еще пример в тему: чему равно значение переменной цикла сразу после завершения цикла?
У нас оно недоступно ибо вышло из области. Если выше цикла объявить указатель и внутри цикла его установить, то по выходе из области попытка разыменования приведёт к неопределённому результату.
Выполнение кода с операциями модифицирующими lvalue но не разделёнными точками следования неопределено и... Я не против пуризма. Программист это в определённом смысле (контексте) пурист. Я против пуризма, уводящего тему в сторону. Я против пуризма для самоутверждения. Я против пуризма вне разумного контекста, иными словами.
Цитата Сообщение от Catstail Посмотреть сообщение
"Плюньте на совершенство, иначе вы не сдвинетесь с места и никогда не доберетесь до сути вещей" (Ж-П Сартр)
Я люблю военное:
Цитата Сообщение от из наставлений одного мудрого артеллериста
Эллипс, это круг, вписанный в квадрат размером 3 на 4
Ни слова правды, но суть - как слеза.
Цитата Сообщение от Catstail Посмотреть сообщение
"Не верь ни чему, но сомневайся только в том, в чем стоит сомневаться
Это совершенство в сути своей. Ведь что бы понять что такое
Цитата Сообщение от Catstail Посмотреть сообщение
ни чему
нужно строго и без сомнения определить что к чему. И сомневаться только в том, что ты правильно определил в чем стоит сомневаться а в чём - категорически не стоит.
Это как ни разу не подумать о белой обезьяне. Контекст - бог истины. Белый Гендальф, с белой обезьяной на белом плече. Что принесёт нам белый бык? Сказку про белого бычка? Посмотрим.
1
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
01.01.2021, 16:19 38
Цитата Сообщение от Catstail Посмотреть сообщение
что это мне даёт?
В общем смысле это дает возможность писать переносимые программы.

Цитата Сообщение от Catstail Посмотреть сообщение
В конкретных реализациях C/С++ адрес - это число.
Есть реализации, где адрес - это пара чисел. Или, где адрес - это число, но в регистр для данных его загрузить нельзя, не поместится. Максимальная разрядность целого числа на такой платформе меньше, чем разрядность указателя.

Но тут даже не в этом дело. Выше вы упомянули long, и к этому тоже были вопросы.
Очень много "боли" было от кода "непуристов", которые в течении десятка лет писали код для 32-битных платформ в святой уверенности, что long всегда будет помещать в себя значение указателя. Несколько лет назад мы как раз переводили огромный проект для с 32 бит на 64. И я бы предпочел, чтобы его писали пуристы, пусть даже с некоторыми перегибами в формализме.
По теме: https://www.viva64.com/ru/a/0004/

На всякий случай, для корректного преобразования указателя в число в C++ существует специальный целый тип uintptr_t. Этот тип специально сделан опциональным как раз для тех случаев, когда на платформе нет возможности осуществить такое преобразование. Если в вашей реализации такой тип присутствует, значит преобразовывать в целое можно, но использовать надо именно этот тип, чтобы потом, когда ваш код, например, будут портировать на большую разрядность, не было проблем.

Цитата Сообщение от Catstail Посмотреть сообщение
А пурист пусть вычисляет
"пурист" скажет, что в этом выражении UB, и рассматривать его с точки зрения вычислимости не имеет смысла.
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2021, 16:51 39
Цитата Сообщение от DrOffset Посмотреть сообщение
"пурист" скажет, что в этом выражении UB, и рассматривать его с точки зрения вычислимости не имеет смысла.
Пуриcт попытается щёлкнуть по носу говорящего (непуристически) про:
Цитата Сообщение от DrewDDD Посмотреть сообщение
double*p показать, что операция p++ передвигает указатель по памяти на определенное кол-во байт впарво
и свести тему с рельс на десятки страниц. Я прекрасно понимаю желание Catstail, защищаться. Вот почему я стал рядом. Про size_t и uintptr_t в этой теме было вот тут:
double*p показать, что операция p++ передвигает указатель по памяти на определенное кол-во байт впарво
7 постов вверх)
Catstail, раз уж я опять выполз - хочу про нулябельность, контекст и ненулябельный тип сказать ещё.У типа size_t такое значение присутствует именно в контексте применения в качестве индекса. Причина именно в том, что индексация начинается с 0 и максимальное значение для типа size_t в типичной реализации (четыре фантомаса) не может быть индексом ни какого элемента, поскольку количество элементов не может быть больше максимумв для size_t. То есть заклинание:
C++
1
 size_t index_to_nowhere = -1 ;
работает) У класса std::string значение npos так и реализовано (обычно).
Если посчитать всё противопуристские заклинания оговорки типа иногда, обычно и пр., становится смешно. Вот так смеясь я пишу.
0
DrOffset
01.01.2021, 17:07     double*p показать, что операция p++ передвигает указатель по памяти на определенное кол-во байт впарво
  #40

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
щёлкнуть по носу говорящего
Справедливости ради, ответвление началось из кода, который содержит ошибку. На ошибку указали, но автор кода это не принял. Дальше начались попытки объяснить ситуацию, конечно у каждого в меру своей терпимости.
Попытки "щелкнуть по носу", тут случились гораздо позже обозначенного момента, т.е. когда суть спора отошла на второй план, а уже стоял вопрос принципа: "прав я или не прав".

0
01.01.2021, 17:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.01.2021, 17:07
Помогаю со студенческими работами здесь

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

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

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

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

Указатель на массив строк - В функции Test печатается непонятно что из памяти
Здравствуйте, Есть часть кода(см. ниже). Объясните, почему в функции Test печатается непонятно...

WriteAllBytes записать определенное число байт
Имеется скажем массив но мне нужно записать только первые 5 байт. Как это сделать? Возникла...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru