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

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

24.12.2020, 18:28. Показов 4453. Ответов 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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
01.01.2021, 22:42
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Catstail Посмотреть сообщение
Кстати, созрел вопрос: если загрузка указателя в long (со знаком!) - такой страшный грех, почему компилятор этого просто не запрещает?
Запреты это вне духа С\С++. Считается что программист несет ответственность за некорректные действия.

Во-вторых это "грех" только в общем случае, в частном случае (когда sizeof(long) <= sizeof(ptr)) это вполне может работать не один год, как было, например, в нашем случае.

Вы все-таки прочитайте ссылки, которые я выше дал. Не ради спора, а ради интереса. Там на все эти вопросы есть ответы.
0
01.01.2021, 22:47

Не по теме:

DrOffset, и перечитывая дискуссию, я натолкнулся на выражение "щелкнуть по носу". Я никого не щелкаю по носу, но и себя щелкать не позволю категорически.

0
01.01.2021, 22:50

Не по теме:

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

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2021, 22:51
Цитата Сообщение от Catstail Посмотреть сообщение
Кстати, созрел вопрос: если загрузка указателя в long (со знаком!) - такой страшный грех, почему компилятор этого просто не запрещает? Ведь разработчикам компилятора сделать это - пара пустых!
Catstail, интеллект компилятора нельзя недооценивать. Но ещё хуже - его переоценивать.
C++
1
2
3
4
5
6
int a(0), *pa=&a ;
    int b=(int)pa;//пошарабану
    cout<<b++<<' '<<pa++<<endl;
    cout<<b<<' '<<pa<<endl;  
    
    char c=(char)pa;//...//error: cast from 'int*' to 'char' loses precision [-fpermissive]|
Ну то есть, для для преобразования в int (не в long!!) он застенчиво молчит (ну типа: кто знает... - может в этом великая сермяжная бинарная правда), а вот при попытке преобразовать в char он порывшись в недрах не находит никакой возможности выполнить это без обрезания. И прослезился
Кстати. Если тупо печатать сам указатель то рост тоже виден)
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
01.01.2021, 22:52
Цитата Сообщение от DrOffset Посмотреть сообщение
Запреты это вне духа С\С++. Считается что программист несет ответственность за некорректные действия.
- ну, это потеря качества. Да, программист несет в C/С++ большую ответственность. Например, не проверяются индексы массивов. И понятно, почему: снизится производительность. Но запретить явное преобразование указателя в целое можно во время компиляции и это объектному коду "ничего не будет стоить".
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
01.01.2021, 22:55
Цитата Сообщение от Catstail Посмотреть сообщение
Но запретить явное преобразование указателя в целое можно во время компиляции и это объектному коду "ничего не будет стоить".
Достаточно того, что оно явное.
Что касается запретов, то те, кому это важно, могут настроить свой компилятор на выдачу подобных запретов и жить счастливо.
Однако глобальный запрет только навредит. Кода, который использует эту возможность, очень много, и не всегда этот код - некорректный.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
01.01.2021, 22:56
Цитата Сообщение от IGPIGP Посмотреть сообщение
char c=(char)pa;//...//error: cast from 'int*' to 'char' loses precision [-fpermissive]|
- ну тут-то понятно и логично. Байт слишком короткий для указателя.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2021, 22:59
Цитата Сообщение от Catstail Посмотреть сообщение
Но запретить явное преобразование указателя в целое можно во время компиляции и это объектному коду "ничего не будет стоить".
В char запрещает
(short побери) :
C++
1
short d =(short)pa;//error: cast from 'int*' to 'short int' loses precision [-fpermissive]|
ну то есть, он возмущается когда ну совсем борзость отлавливает)
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
01.01.2021, 22:59
Цитата Сообщение от Catstail Посмотреть сообщение
ну тут-то понятно и логично.
А здесь будет аналогичная диагностика, если long меньше указателя.
Наподобие такой:
'type cast': pointer truncation from 'int *' to 'long'
главное ее не выключать
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
01.01.2021, 23:02
Цитата Сообщение от DrOffset Посмотреть сообщение
Кода, который использует эту возможность, очень много, и не всегда этот код - некорректный.
- опа! Вот и я о том же... А пуристы-солипсисты клюют меня, бедного. И что такое адрес я не понимаю (да и не могу, ибо адрес - непознаваемое понятие), и с логикой у меня проблемы...

Предлагаю поставить на этом точку и благодарю тех, (DrOffset, IGPIGP) кто общался со мной доброжелательно. Но при попытках щелкнуть меня по носу, мне придется отвечать адекватно.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2021, 23:07
Цитата Сообщение от Catstail Посмотреть сообщение
слишком короткий
Ну может компилятор писал мужик с известной проблемой, - да. А вот я не понимаю, что значит
Цитата Сообщение от Catstail Посмотреть сообщение
Байт слишком короткий для указателя
И к тому же
Байт читает и думает, - опять мне досталось. Несправедливо!

Добавлено через 5 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
ну то есть, для для преобразования в int (не в long!!) он застенчиво молчит
не ловит он обрезание хотя -fpermissive включен. А 32 без знака в 32 со знаком не влезет. Но MinGW об этом не знает. То есть, компилятор мог бы но не реализует. Может у других получше с этим.
1
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
01.01.2021, 23:12
Цитата Сообщение от Catstail Посмотреть сообщение
Но запретить явное преобразование указателя в целое можно во время компиляции
Это противоречит самой идее существования "явных кастов".
C++ запрещает только неявные касты, что бы уберечь от ничайных ошибок.

Явные же касты предполагают, что программист понимает что делает.
Из завезли в язык, специально, что бы у программиста была возможность выполнить нестандартное преобразование там, где это действительно обоснованно.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.01.2021, 23:26
Цитата Сообщение от eva2326 Посмотреть сообщение
Явные же касты предполагают, что программист понимает что делает.
Цитата Сообщение от IGPIGP Посмотреть сообщение
ну то есть, для для преобразования в int (не в long!!) он застенчиво молчит
Цитата Сообщение от IGPIGP Посмотреть сообщение
не ловит он обрезание хотя -fpermissive включен. А 32 без знака в 32 со знаком не влезет. Но MinGW об этом не знает. То есть, компилятор мог бы но не реализует. Может у других получше с этим.
но
Цитата Сообщение от IGPIGP Посмотреть сообщение
В char запрещает
(short побери) :
C++
1
short d =(short)pa;//error: cast from 'int*' to 'short int' loses precision [-fpermissive]|
ну то есть, он возмущается когда ну совсем борзость отлавливает)
обе студии (2008/2017), правда едят всё молча)
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
01.01.2021, 23:39
Цитата Сообщение от IGPIGP Посмотреть сообщение
А 32 без знака в 32 со знаком не влезет. Но MinGW об этом не знает.
Конечно не знает. Потому что 32 без знака лезет в 32 со знаком.
An unsigned integer type has the same object representation, value representation, and alignment requirements as the corresponding signed integer type.
For each value x of a signed integer type, the value of the corresponding unsigned integer type congruent to x modulo 2N has the same value of corresponding bits in its value representation.
Здесь ведь не в знаке дело совсем.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.01.2021, 00:10
Верно) Переполнение положительной части даёт отрицательные значения для типа со знаком и растущие далее значения для беззнакового типа. То есть, если ширины хватает - он полагает, что
Цитата Сообщение от eva2326 Посмотреть сообщение
программист понимает что делает
Но тогда, вопрос. Если по
Цитата Сообщение от eva2326 Посмотреть сообщение
идее существования "явных кастов"
человек может сделать что-то (может и непереносимое или потенциально опасное) и разработчики компилятора полагают это этически приемлемым, то почему некоторые участники, считают себя вправе быть круче? Вопрос чисто этический и души невинно убиенных растлеваемых новичков не при чём. Можно положить свой код и пусть разбирают и сравнивают. Зачем бородатые дядьки учат других бородатых дядек столь бесцеремонно?
0
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
02.01.2021, 00:20
Цитата Сообщение от IGPIGP Посмотреть сообщение
Зачем бородатые дядьки учат других бородатых дядек столь бесцеремонно?
Задайте этот вопрос этим самым дядькам.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.01.2021, 00:23
Цитата Сообщение от IGPIGP Посмотреть сообщение
разработчики компилятора полагают это этически приемлемым
Разработчики реализуют спецификацию языка С++. Вопрос этики перед ними, я полагаю, не стоит совсем. Это предельно формальное действо.

Код, аналогичный вашему
C++
1
short d =(short)pa;
только с long и int дает в MinGW точно такую же ошибку:
error: cast from 'int*' to 'int' loses precision [-fpermissive]

Цитата Сообщение от IGPIGP Посмотреть сообщение
почем некоторые участники, считают себя вправе быть круче?
Этот вопрос, я полагаю, лучше задать им.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.01.2021, 00:31
Цитата Сообщение от eva2326 Посмотреть сообщение
Задайте этот вопрос этим самым дядькам.
Я не мазохист. Кроме того мы с DrOffset, говорим о правомерности предупреждений компилятора при встрече явного преобразования. Вопрос был поднят
Catstail, небезосновательно. Если компилятор считает данный код допустимым, то почему человек не может его использовать для демонстрации мысли не связанной с преобразованием непосредственно?
Компилятор молчит и это либо странно либо нормально. Дядьки галдят и это либо странно либо нормально. Но получается не пересекающееся множество возможных состояний.

Добавлено через 1 минуту
Цитата Сообщение от DrOffset Посмотреть сообщение
олько с long и int дает в MinGW точно такую же ошибку:
Видимо у нас разные версии)

Добавлено через 2 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
разработчики реализуют спецификацию языка С++. Вопрос этики перед ними, я полагаю, не стоит совсем. Это предельно формальное действо.
Я говорю технических аспектах этики. Но вы далее приводите
Цитата Сообщение от DrOffset Посмотреть сообщение
только с long и int дает в MinGW точно такую же ошибку:
и это говорит что в вашей версии компилятора решено было это сделать. Надо обновиться видимо.
1
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.01.2021, 00:31
Цитата Сообщение от IGPIGP Посмотреть сообщение
Видимо у нас разные версии)
Разрядность у нас разная
Ваш MinGW 32-битный код создает, и там такой каст безопасен.
А мой - 64-битный, и закономерно ошибка появляется.
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.01.2021, 00:53
Да. У меня 32 и к тому же gcc version 5.1.0
И вот тут как раз видно, что когда компилятор видит ошибку он таки возмущается)
А когда каст безопасен - молчит. Воспитанный
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.01.2021, 00:53
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru