Answer the question
In order to leave comments, you need to log in
What will i be equal to with such an unusual pointer?
I came across an interesting problem:
uint32_t *i = 1024;
i++;
Answer the question
In order to leave comments, you need to log in
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.
Это на будущее. 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 указывает на девятый элемент по сравнению с элементом, на который он указывал до присваивания.
Помимо добавления или вычитания указателей и целых чисел, единственную операцию, которую можно выполнять с указателями, - это вычитание одного указателя из другого.
."
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question