При запуске кода, как это он показывает значение г -> 4 Если раскомментировать COUT < < & он показывает правильное значение -> 1Указатель на следующий адрес
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int a=1,b=2,c=3,d=4;
/*cout<<&a<<endl;
cout<<&b<<endl;
cout<<&c<<endl;
cout<<&d<<endl;*/
cout<<*(&b - 0x1);
}
Может ли кто-нибудь помочь мне понять, почему cout изменяет возвращаемое значение?
Это неопределенное поведение, поэтому все может случиться. – interjay
Поскольку это предположение, я помещаю его здесь: я должен сказать, что переменные оптимизируются, так как вы их не используете, поэтому вы вызываете неопределенное поведение, поскольку 'a' больше не существует. – NathanOliver
Я согласен с NathanOliver. Вы уверены, что '4' происходит от' d'? Вы, скорее всего, просто хватаете какую-то ценность из стека. Попробуйте изменить значение 'd' на что-то еще и посмотреть, останется ли печатное значение 4. В конечном итоге слишком много полагаться на компилятор, помещающий вещи в стек в определенном порядке, является рискованным, если вы не знаете своего компилятора очень и очень хорошо.Особенно для чего-то вроде этого, что не определено, как указывал interjay. –