Я пытаюсь изменить переменную указателем, проблема в том, что они имеют один и тот же адрес, но вывод неправильный.
Вот код:
int *ret;
int set = 56;
ret = (int *)&ret - 1;
*ret = 3;
cout << ret << endl << &set << endl << set <<endl;
Вывод:
0x61ff08
0x61ff08
3
Это выглядит великолепно, но что действительно странно, так это то, что когда я заменяю:
cout << ret << endl << &set << endl << set <<endl;
На это:
cout << ret << endl << set <<endl;
вывод становится:
0x61ff04
56
Изменение значения указателя и переменная set
не изменяются. Это как если бы я вынул &set
из cout
адрес, указанный указателем, обменял его адрес с переменной.
Если я это сделал:
ret = (int *)&ret + 1; // instead of -1
Выходстановится:
0x61ff0c
3
Могу ли я получить объяснение? Я не нашел никаких документов по этому поводу.