4 / 3 / 1
Регистрация: 28.07.2009
Сообщений: 134
|
|
1 | |
MS VS-2017 - void* и ptrdiff_t23.04.2020, 19:10. Показов 546. Ответов 14
Метки нет (Все метки)
0
|
23.04.2020, 19:10 | |
Ответы с готовыми решениями:
14
System.Void из C# использоваться не может - для получения объекта типа void используйте typeof (void) Реализовать аналог `void *memmove(void *to, void *from, size_t n)` Как определять ptrdiff_t ? Положительное смещение: size_t vs ptrdiff_t |
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
23.04.2020, 19:37 | 2 |
0
|
4 / 3 / 1
Регистрация: 28.07.2009
Сообщений: 134
|
|
23.04.2020, 20:02 [ТС] | 3 |
Но int это всегда 32 бита, а void* и ptrdiff_t зависят от платформы.
я уточню вопрос: ptrdiff_t и void* взаимозаменяемы или нет?
0
|
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
23.04.2020, 20:05 | 4 |
1
|
4 / 3 / 1
Регистрация: 28.07.2009
Сообщений: 134
|
|
23.04.2020, 20:33 [ТС] | 5 |
Т.е ptrdiff_t обеспечивает размер только до 2^31?
0
|
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
23.04.2020, 20:36 | 6 |
1
|
4 / 3 / 1
Регистрация: 28.07.2009
Сообщений: 134
|
|
25.04.2020, 19:16 [ТС] | 7 |
К сожалению, опыт показывает на обратное.
Сейчас я понимаю так: void * - это собственно указатель, а ptrdiff - это только место в памяти под указатель, и использование его в качестве указателя дает ошибку. Я прав или нет?
0
|
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
25.04.2020, 19:19 | 8 |
0
|
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
|
|
25.04.2020, 19:24 | 9 |
ezus, void* и ptrdiff это разные типы, объясни что сделать хочешь?
Добавлено через 3 минуты стандарт языка говорит лишь что можно преобразовать указатель в целочисленный тип(достаточного размера) и обратно с сохранением значения. Про представление указателя ничего вроде не говорится( разве что два указателя, указывающие на один адрес, могут иметь разные значения)
0
|
4 / 3 / 1
Регистрация: 28.07.2009
Сообщений: 134
|
|
25.04.2020, 20:01 [ТС] | 10 |
Раньше как-то такие вопросы не возникали, но переход на 64 их поставил.
Можно ли вместо void* использовать что-то типа ptrdiff_t, PINT_PTR и т.п. для определения переменных, а не только места под хранение указателя? Это интересно! Как это может быть? Это слабые указатели, свопинг или что-то другое?
0
|
4 / 3 / 1
Регистрация: 28.07.2009
Сообщений: 134
|
|
25.04.2020, 21:05 [ТС] | 13 |
Спасибо.
Вы подтолкнули меня на другой взгляд, и , похоже, мне стало понятно в чем я запутался. Пойдем дальше. Добавлено через 51 минуту И снова вопрос. Для "unsigned int" советуют использовать size_t, как платформо-независимый тип. А какой тип лучше использовать для signed int?
0
|
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
25.04.2020, 21:15 | 14 |
1
|
19 / 61 / 13
Регистрация: 11.06.2018
Сообщений: 212
|
|
25.04.2020, 23:21 | 15 |
ezus, https://www.viva64.com/ru/a/0004/
Добавлено через 4 минуты Звучит настораживающе. void* - это указатель, а ptrdiff_t - нет. Что такое size_t и ptrdiff_t intptr_t
0
|
25.04.2020, 23:21 | |
25.04.2020, 23:21 | |
Помогаю со студенческими работами здесь
15
В чем разница между uinptr_t, size_t, ptrdiff_t Ошибка cannot convert from type void*(classname::) () to type void*(*)(void*) Void menu(void); что это ? почему не void menu(); Для чего нужна функция void interrupt(void) и как её использовать? Дважды вычислить значение выражения, используя функции возвращающие void и не void Как написать это - void fastcall TForml:oOp(void)? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |