BuckvicK
@BuckvicK
Опытный ламер

Что происходит с этим кодом?

int main(){
	int arr[] = {1, 2, 5};
	int *w = &arr[2];
	int n = *w++;
}

Почему &arr[2] == arr[2]? Ведь вроде должен быть адрес в памяти.
И почему n так же равняется 5? Значение указателя мы ведь увеличили.
  • Вопрос задан
  • 345 просмотров
Решения вопроса 1
BuriK666
@BuriK666
Компьютерный псих
а кто сказал что &arr[2] == arr[2]??
&arr[2] - это pinter, а arr[2] это int
PS: GCC ругается на это "warning: comparison between pointer and integer"

int i = 5;
int n = i++;
сначала n станет равно i (5), затем i будет увеличен на 1
если ++i, то сначала i будет увеличен, а потом n будет равен результату.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@abcd0x00
int n = *w++;

*w++ работает так же, как *(w++) .
Сначала происходит инкремент указателя, операция пост-инкремента возвращает значение операнда до инкремента, а затем это значение разыменовывается и результат присваивается переменной n.
После этого в n находится 5, а указатель w указывает за край массива.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы