Описание тега 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 &lt;class T&gt; struct node { node&lt;T&gt; *prev = NULL; node&lt;T&gt; *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 &lt; n; i++) a[i] = 0; Тем не менее, я не уверен, что это правильно, кажется, что должно быть for (size_t i = 0; i &lt; 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, поведение не определено. - конец примечани…
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…
2 ответа

&amp;q - &amp;p, q и p указывают на неинициализированный массив символов. А о/п равно 1. Как?

main(){ char a[20],*p,*q; p=&amp;a[0]; q=&amp;a[10]; printf ("%d\n",&amp;q - &amp;p) } Эта программа C дает o/p как: 1 Насколько я понимаю, значения, хранящиеся по этим адресам, — мусор. Как их вычитание может быть 1? Кто-нибудь может объяснить, ка…
13 мар '22 в 16:23
1 ответ

Почему ptrdiff_t подписан?

Если бы он был беззнаковым, он мог бы ссылаться на вдвое большее количество элементов. На моей машинеPTRDIFF_MAXрасширяется до9223372036854775807i64, тогда какULLONG_MAXявляется18446744073709551615Ui64. Я знаю, что эти ценности сами по себе огромны,…
16 авг '22 в 01:54