Вопросы с тегом 'pointer-arithmetic'

Вы можете выполнить ограниченное число арифметических операций над указателями. Эти операции: приращение, уменьшение, сложение, вычитание, сравнение и присвоение.
17
ответов

С массивами, почему это так, [5] == 5 [a]?

Как указывает Джоэл в подкасте # 34, в Язык программирования C (aka: K и R), упоминается это свойство массивов в C: a[5] == 5[a] Джоэл говорит, что это из-за арифметики указателя, но я до сих пор не понимаю. Почему a[5] == 5[a]?
задан 19 дек. '08 в 20:01
8
ответов

Арифметика указателя для указателя void в C

Когда указатель на определенный тип (скажем int, char, float,..) увеличивается, его значение увеличивается на размер этого типа данных. Если указатель void, который указывает на данные размера x, увеличивается, как он достигает точки x байтов вперед...
задан 19 авг. '10 в 18:05
7
ответов

Арифметика указателей

Есть ли у кого-нибудь хорошие статьи или объяснения (блоги, примеры) для арифметики указателя? Рисунок аудитории - куча Java-программистов, изучающих C и С++.
задан 27 дек. '08 в 10:10
5
ответов

Для указателя p, может ли p <p + 1 быть ложным в крайнем случае?

Возможно ли для переменной указателя p, что p < (p + 1) является ложным? Пожалуйста, объясните свой ответ. Если да, при каких обстоятельствах это может случиться? Мне было интересно, может ли p + 1 переполняться и быть равно 0. Например. Н...
задан 03 дек. '14 в 16:30
11
ответов

Доступ к значениям массива посредством арифметики указателя и подписи в C

Я продолжаю читать, что в C, используя арифметику указателя, как правило, быстрее, чем подписи для доступа к массиву. Это правда даже с современными (предположительно оптимизирующими) компиляторами? Если это так, это все еще так, когда я начинаю отх...
задан 24 окт. '08 в 14:25
4
ответов

Должен ли это называться какой-то особый случай обрезки объектов?

Скажем, у меня есть класс Derived, который происходит из класса Base, тогда как sizeof(Derived) > sizeof(Base). Теперь, если вы выделяете массив Derived следующим образом: Base * myArray = new Derived[42]; а затем пытается получить доступ к ...
задан 05 мая '16 в 15:54
1
ответ

Арифметика указателя по границам подобъектов

Имеет ли следующий код (который выполняет арифметику указателей на границах подобъектов) корректное поведение для типов T, для которых он компилируется (что в С++ 11, необязательно должен быть POD) или его подмножеством? #include <cassert> #i...
задан 05 марта '13 в 9:53
7
ответов

В чем обоснование ограничений на арифметику или сравнение указателя?

В C/С++ сложение или вычитание указателя определяется только в том случае, если результирующий указатель лежит внутри исходного указателя полный объект. Более того, сравнение двух указателей может быть выполнено только в том случае, если два заострен...
задан 03 дек. '17 в 11:05
1
ответ

Является ли указатель "один-на-конец" типа не-массива допустимым понятием в С++?

В стандарте С++ [с 5.7] говорится: Если оба операнда указателя и результат указывают на элементы одного и того же объекта массива или одно прошлое последний элемент объекта массива, оценка не должна приводить к переполнению; в противном случае пове...
задан 24 янв. '13 в 19:15
1
ответ

С++ интересный синтаксис для печати новой строки в std:: cout

следующий код печатает квадрат символов '*': int m = 5; int n=5; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) std::cout << "*" << " \n"[j==5]; Вывод: * * * * * * * * * * * * * * * * * * * * * * * * * ...
задан 14 мая '17 в 11:31
6
ответов

Принимает ли адрес локальной переменной постоянное выражение в С++ 11?

Следующая программа С++ 11: int x = 42; void f() { int y = 43; static_assert(&x < &y, "foo"); } int main() { f(); } Не компилируется с gcc 4.7, поскольку он жалуется: error: ‘&y’ is not a constant express...
задан 21 авг. '13 в 11:24
3
ответов

Почему добавление к указателю с + = работает, но указатель + 1 не работает?

Я выделяю память для массива, но я перемещаюсь туда, где указатель немного указывает вперед. Доступ к элементам работает нормально. Однако он начал создавать проблему с освобождением выделенной памяти. Malloc жалуется, что освобожденный указатель ник...
задан 31 янв. '15 в 23:45
4
ответов

Что является результатом NULL + int?

Я видел, как в реализациях OpenGL VBO используется следующий макрос: #define BUFFER_OFFSET(i) ((char *)NULL + (i)) //... glNormalPointer(GL_FLOAT, 32, BUFFER_OFFSET(x)); Не могли бы вы подробно рассказать о том, как работает этот макрос? Можно ли ...
задан 27 нояб. '11 в 7:49
2
ответов

Самый эффективный арифметический тип указателя в c

Я предполагаю, что внутреннее кастинг происходит, когда мы пишем: arr[i] (что эквивалентно *(arr+i)). Потому что i может быть, например, short, int или long или беззнаковый вариант любого из этих трех. Итак, мой вопрос прост: какой тип должен i бы...
задан 06 февр. '14 в 10:06
4
ответов

Портативный и безопасный способ добавления смещения байта к любому указателю

Я совсем недавно работаю с С++ и не понял всех тонкостей и тонкостей языка. Какой самый портативный, правильный и безопасный способ добавить произвольное смещение байта в указатель любого типа в С++ 11? SomeType* ptr; int offset = 12345 /* bytes ...
задан 10 апр. '13 в 21:55