0 / 0 / 0
Регистрация: 24.12.2020
Сообщений: 4

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

24.12.2020, 18:28. Показов 4486. Ответов 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
38164 / 21099 / 4306
Регистрация: 12.02.2012
Сообщений: 34,687
Записей в блоге: 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
38164 / 21099 / 4306
Регистрация: 12.02.2012
Сообщений: 34,687
Записей в блоге: 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
38164 / 21099 / 4306
Регистрация: 12.02.2012
Сообщений: 34,687
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru