L
L
LNK2016-06-13 15:05:49
C++ / C#
LNK, 2016-06-13 15:05:49

What will i be equal to with such an unusual pointer?

I came across an interesting problem:

uint32_t *i = 1024;
i++;

What is i equal to?
It is noteworthy that the pointer here is not initialized by the usual method. There are no errors in the code, this is guaranteed.
VS and Code::Blocks refuse to compile. What is the point, please explain.

Answer the question

In order to leave comments, you need to log in

2 answer(s)
A
Anton Zhilin, 2016-06-13
@NikHaker

1028. When incrementing a pointer, sizeof is added to it from what it points to, that is,
equivalent
casting to a pointer is not safe). To compile to C++, you need to tweak the code a bit.

Даниил Игоревич, 2016-06-13
@Petr_Anisimov

Это на будущее. Char занимает 1 байт, так что адрес увеличится на 1 в шестнадцатеричном представлении, если к char прибавить 1, а если прибавить 1 к int1, как и к uint32_t(они оба занимают по 4 байта), то адрес увеличится на 4(был 0xAAFFAACB, а станет 0xAAFFAACF), тип double занимает 8 байт, то есть если, например, переменная типа double занимала адрес 0x123AB111, то будет занимать 0x123AB119 при увеличении указателя на 1.
"К указателям могут применяться только две арифметические операции: сложение и вычитание. Для понимания арифметических действий с указателями предположим, что p1 - это указатель на целое, содержащий значение 2000, и будем считать, что целые имеют длину 2 байта. После выражения
p1 ++;
содержимое p1 станет 2002, а не 2001! Каждый раз при увеличении p1 указатель будет указывать на следующее целое. Это справедливо и для уменьшения. Например:
р1 --;
приведет к тому, что p1 получит значение 1998, если считать, что раньше было 2000
Естественно, все не ограничивается только уменьшением или увеличением. Можно добавлять или вычитать из указателей целые числа. Выражение
p1 = p1 + 9;
приводит к тому, что указатель p1 указывает на девятый элемент по сравнению с элементом, на который он указывал до присваивания.
Помимо добавления или вычитания указателей и целых чисел, единственную операцию, которую можно выполнять с указателями, - это вычитание одного указателя из другого.
."100120ea0ab7436d8bd981033bea675e.png

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question