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

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

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

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

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

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

Как этот кусок кода определяет размер массива без использования sizeof()?

Проходя через несколько вопросов на собеседовании с C, я обнаружил вопрос о том, "Как найти размер массива в C без использования оператора sizeof?", Со следующим решением. Это работает, но я не могу понять, почему. #include <stdio.h> int main...
15 мая '19 в 20:03
8 отв.

Массив-синтаксис против синтаксиса указателя и генерации кода?

В книге "Понимание и использование указателей С" Ричарда Риса говорится на стр. 85, int vector[5] = {1, 2, 3, 4, 5}; Код, сгенерированный vector[i], отличается от кода, генерируемого *(vector+i). vector[i] нотации vector[i] генерирует машинный ко...
17 июля '18 в 8:00
7 отв.

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

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

Позволяет ли стандарт C назначать произвольное значение указателю и увеличивать его?

Является ли поведение этого кода хорошо определенным? #include <stdio.h> #include <stdint.h> int main(void) { void *ptr = (char *)0x01; size_t val; ptr = (char *)ptr + 1; val = (size_t)(uintptr_t)ptr; printf("%zu\n...
28 июня '18 в 15:48
5 отв.

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

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

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

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

Арифметика указателей с двумя разными буферами

Рассмотрим следующий код: int* p1 = new int[100]; int* p2 = new int[100]; const ptrdiff_t ptrDiff = p1 - p2; int* p1_42 = &(p1[42]); int* p2_42 = p1_42 + ptrDiff; Теперь, гарантирует ли Стандарт, что p2_42 указывает на p2[42]? Если нет, то вс...
28 янв. '19 в 14:52
2 отв.

Может ли ptrdiff_t представлять все вычитания указателей на элементы одного и того же объекта массива?

Для вычитания указателей i и j элементам одного и того же объекта массива примечание в [expr.add # 5] гласит: [Примечание. Если значение i-j не находится в диапазоне представляемых значений типа std​::​ptrdiff_t, поведение не определено. - конечна...
20 марта '18 в 12:27
1 отв.

Установите shared_ptr с new_pointer, который является old_pointer + offset

Вот умный указатель: std::shared_ptr<char> p(new char[size]) который представляет массив, заполненный необработанным содержимым двоичного файла. После (и только после) весь массив копируется из файла в ОЗУ, я могу его проанализировать, и во вр...
17 февр. '19 в 23:49
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