Я опытный программист на C#, но я очень новичок в C++. Я прекрасно понимаю основную идею указателей, но я играл. Вы можете получить фактическое целочисленное значение указателя, приведя его как int
:
int i = 5;
int* iptr = &i;
int ptrValue = (int)iptr;
Что имеет смысл; это адрес памяти. Но я могу перейти к следующему указателю и привести его к int
:
int i = 5;
int* iptr = &i;
int ptrValue = (int)iptr;
int* jptr = (int*)((int)iptr + 1);
int j = (int)*iptr;
и я получаю, казалось бы, случайное число (хотя это не очень хорошая PSRG). Что это за номер? Это другой номер, используемый тем же процессом? Возможно, это из-за другого процесса? Это плохая практика или запрещено? А если нет, то есть ли в этом польза? Это круто.
int *
, компьютер добавляетsizeof(int)
к значению в памяти. Когда вы приводите его кint
, а затем добавляете 1, компьютер просто добавляет 1. (По крайней мере, это то, что обычно происходит. При наличии неопределенного поведения компьютер может делать все, что угодно). , и даже когда поведение определено, компьютеру нужно сделать только то, что дает такие же видимые результаты, как и написанная вами программа.) - person user2357112 supports Monica   schedule 23.12.2013