Описание тега ptrdiff-t
In the C programming language, ptrdiff_t is the signed integer type of the result of subtracting two pointers.
3
ответа
Должен ли я привести size_t к ptrdiff_t?
У меня есть массив указателей malloc, который формирует хэш-таблицу. Чтобы пройти по хеш-таблице, я бы использовал арифметику указателей, например: node_t ** tc = table; size_t tcs = sizeof(node_t *); for(long i = 0; i < tableSize; tc+=tcs, ++i) …
17 май '15 в 11:09
1
ответ
C++ size_t и ptrdiff_t для индексации отрицательных массивов
Мне трудно выбирать между size_t а также ptrdiff_t для типа индекса, который должен иметь возможность хранить отрицательное значение. Чтобы быть точным, в моем коде мне нужно реализовать массив. Я получаю его длину (в конструкторе) как тип size_tи к…
10 авг '15 в 08:32
1
ответ
Кроссплатформенная версия __PTRDIFF_TYPE__
Есть ли кроссплатформенный способ определить, ptrdiff_t такой же как long или же long long во время предварительной обработки? я знаю __PTRDIFF_TYPE__ должен давать тип с помощью gcc / g ++, но он не определен в VC/VC++ для Windows. Есть ли лучший п…
22 дек '15 в 02:57
2
ответа
Копирование одной части строки в другую в C
У меня проблемы с попыткой скопировать одну часть строки в другую. Учитывая эти два указателя на символ: line points at string cointaining: "helmutDownforce:1234:44:yes" username points at: NULL Вот моя функция, которая принимает эти указатели в кач…
03 сен '16 в 15:02
2
ответа
<stddef.h> std::ptrdiff_t'не был объявлен
Я создал свой собственный исходный файл и пытаюсь добавить stddef.h. При компиляции у меня следующая ошибка: std:: ptrdiff_t 'не был объявлен. Что я сделал не так?
29 сен '16 в 12:03
0
ответов
Как сообщить об ошибке в LMDB?
Я даже исправил саму ошибку, но те "списки рассылки", которые они используют для отслеживания ошибок, - полная чушь... Проблема заключается в том, что в 32-битной Windows при сборке в Visual Studio lmdb не может сохранить файл размером более 2 ГБ, п…
16 ноя '17 в 21:09
2
ответа
Использование std::ptrdiff_t для пользовательских типов
У меня есть простая структура с именем node, которая содержит значение + 2 указателя на следующий / предыдущий узлы. template <class T> struct node { node<T> *prev = NULL; node<T> *next = NULL; T data; }; Здесь у нас есть функция, …
03 янв '15 в 19:06
5
ответов
Разница в указателях между членами структуры?
Стандарт C99 гласит, что: Когда вычтены два указателя, оба должны указывать на элементы одного и того же объекта массива или один за последним элементом последнего объекта массива. Рассмотрим следующий код: struct test { int x[5]; char something; sh…
03 ноя '14 в 09:54
3
ответа
Для перебора массива мы должны использовать size_t или ptrdiff_t?
В этом блоге запись Андрея Карпова под названием "О size_t а также ptrdiff_t " Он показывает пример, for (ptrdiff_t i = 0; i < n; i++) a[i] = 0; Тем не менее, я не уверен, что это правильно, кажется, что должно быть for (size_t i = 0; i < n; i…
07 июл '18 в 21:41
1
ответ
Как обработать ptrdiff_t в сгенерированной SWIG оболочке Java?
У меня есть эта структура в C: typedef struct THTensor { ... ptrdiff_t storageOffset; ... } THTensor; Однако сгенерированный SWIG Java-код: public SWIGTYPE_p_ptrdiff_t getStorageOffset() { return new SWIGTYPE_p_ptrdiff_t(THJNI.THFloatTensor_storageO…
11 авг '17 в 03:50
2
ответа
Может ли ptrdiff_t представлять все вычитания указателей на элементы одного и того же объекта массива?
Для вычитания указателей i а также j к элементам того же объекта массива записка в [expr.add#5] гласит: [ Примечание: если значение i-j не находится в диапазоне представимых значений типа std::ptrdiff_t, поведение не определено. - конец примечани…
20 мар '18 в 09:27
2
ответа
Использование ptrdiff_t
Я реализую итератор через непрерывный кусок памяти и пришел к вопросу о его соответствующем использовании. Моя текущая реализация (при условии, что я перебираю массив charс). typedef struct iterator{ void *next_ptr; void *limit; //one past last elem…
26 мар '19 в 15:53
4
ответа
Можем ли мы вычесть нулевые указатели?
Так как арифметика указателей определена в том же массиве, я сомневаюсь, что мы можем вычесть NULL От другого NULL, Я обеспокоен реализацией: //first and second can both either be from the same array //or be both NULL prtdiff_t sub(void *first, void…
18 апр '19 в 13:59
3
ответа
У size_t такой же размер и выравнивание, как у ptrdiff_t?
На моей платформе (и я думаю, на большинстве из них) std::size_t а также std::ptrdiff_t иметь одинаковый размер и одинаковое выравнивание. Есть ли платформа, где это не так? Вкратце: это требует стандарт?
21 май '20 в 16:41
0
ответов
Могу ли я преобразовать void * в ptrdiff_t в C89?
Позволит ли стандарт C89 преобразовать void * в ptrdiff_t, чтобы я мог распечатать адрес памяти как шестнадцатеричный? Например: static const char *dig = "0123456789abcdef"; char buf[16], *ptr = buf; /* Need 16 bytes when sizeof(void *) == 8 */ void…
11 сен '21 в 21:11
2
ответа
Какова мотивация ptrdiff_t?
Почему C определяет отдельный тип для разницы между двумя указателями? Например, почему это нельзя было определить как long long, или даже делать? Есть ли когда-нибудь время, когда intmax_tне равно ptrdiff_t? В принципе, в чем смысл, почему этот typ…
16 янв '21 в 09:31
2
ответа
&q - &p, q и p указывают на неинициализированный массив символов. А о/п равно 1. Как?
main(){ char a[20],*p,*q; p=&a[0]; q=&a[10]; printf ("%d\n",&q - &p) } Эта программа C дает o/p как: 1 Насколько я понимаю, значения, хранящиеся по этим адресам, — мусор. Как их вычитание может быть 1? Кто-нибудь может объяснить, ка…
13 мар '22 в 16:23
1
ответ
Почему ptrdiff_t подписан?
Если бы он был беззнаковым, он мог бы ссылаться на вдвое большее количество элементов. На моей машинеPTRDIFF_MAXрасширяется до9223372036854775807i64, тогда какULLONG_MAXявляется18446744073709551615Ui64. Я знаю, что эти ценности сами по себе огромны,…
16 авг '22 в 01:54