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

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

24.12.2020, 18:28. Показов 4982. Ответов 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
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
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
9007 / 4708 / 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
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
01.01.2021, 22:52
Цитата Сообщение от DrOffset Посмотреть сообщение
Запреты это вне духа С\С++. Считается что программист несет ответственность за некорректные действия.
- ну, это потеря качества. Да, программист несет в C/С++ большую ответственность. Например, не проверяются индексы массивов. И понятно, почему: снизится производительность. Но запретить явное преобразование указателя в целое можно во время компиляции и это объектному коду "ничего не будет стоить".
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.01.2021, 22:55
Цитата Сообщение от Catstail Посмотреть сообщение
Но запретить явное преобразование указателя в целое можно во время компиляции и это объектному коду "ничего не будет стоить".
Достаточно того, что оно явное.
Что касается запретов, то те, кому это важно, могут настроить свой компилятор на выдачу подобных запретов и жить счастливо.
Однако глобальный запрет только навредит. Кода, который использует эту возможность, очень много, и не всегда этот код - некорректный.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
01.01.2021, 22:56
Цитата Сообщение от IGPIGP Посмотреть сообщение
char c=(char)pa;//...//error: cast from 'int*' to 'char' loses precision [-fpermissive]|
- ну тут-то понятно и логично. Байт слишком короткий для указателя.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 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
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.01.2021, 22:59
Цитата Сообщение от Catstail Посмотреть сообщение
ну тут-то понятно и логично.
А здесь будет аналогичная диагностика, если long меньше указателя.
Наподобие такой:
'type cast': pointer truncation from 'int *' to 'long'
главное ее не выключать
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
01.01.2021, 23:02
Цитата Сообщение от DrOffset Посмотреть сообщение
Кода, который использует эту возможность, очень много, и не всегда этот код - некорректный.
- опа! Вот и я о том же... А пуристы-солипсисты клюют меня, бедного. И что такое адрес я не понимаю (да и не могу, ибо адрес - непознаваемое понятие), и с логикой у меня проблемы...

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

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

Явные же касты предполагают, что программист понимает что делает.
Из завезли в язык, специально, что бы у программиста была возможность выполнить нестандартное преобразование там, где это действительно обоснованно.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 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
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
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
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.01.2021, 00:10
Верно) Переполнение положительной части даёт отрицательные значения для типа со знаком и растущие далее значения для беззнакового типа. То есть, если ширины хватает - он полагает, что
Цитата Сообщение от eva2326 Посмотреть сообщение
программист понимает что делает
Но тогда, вопрос. Если по
Цитата Сообщение от eva2326 Посмотреть сообщение
идее существования "явных кастов"
человек может сделать что-то (может и непереносимое или потенциально опасное) и разработчики компилятора полагают это этически приемлемым, то почему некоторые участники, считают себя вправе быть круче? Вопрос чисто этический и души невинно убиенных растлеваемых новичков не при чём. Можно положить свой код и пусть разбирают и сравнивают. Зачем бородатые дядьки учат других бородатых дядек столь бесцеремонно?
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
02.01.2021, 00:20
Цитата Сообщение от IGPIGP Посмотреть сообщение
Зачем бородатые дядьки учат других бородатых дядек столь бесцеремонно?
Задайте этот вопрос этим самым дядькам.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
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
9007 / 4708 / 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
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
02.01.2021, 00:31
Цитата Сообщение от IGPIGP Посмотреть сообщение
Видимо у нас разные версии)
Разрядность у нас разная
Ваш MinGW 32-битный код создает, и там такой каст безопасен.
А мой - 64-битный, и закономерно ошибка появляется.
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 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
Ответ Создать тему
Новые блоги и статьи
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
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 на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru