У меня есть одна проблема с открытым исходным кодом в указателях, которую я попытался воспроизвести в этом ниже небольшом фрагменте.проблема в двойном указателе адрес добавление
int main()
{
int **a=0x0;
printf ("a = %d Add = %d\n", a, a+75);
return 1;
}
Expectation, чтобы получить 75/0x4b но этот код дает 300 в 32 бит и 600 в 64-битных машин.
Выход:
a = 0 Add = 600
Но идеология за доступ к добавленной позиции 75-й позиции т.е. в хэш-таблице.
Так оно и должно быть
printf ("a = %d Add = %d\n", a, sizeof (a)+75);
Но я не мог в состоянии догадаться, почему это 300 или 600 выход. может ли кто-нибудь указать?
я пошел до точки, где есть некоторый сдвиг влево внутри происходит так:
75 - 1001011
600 - 1001011000.
Solutions оценены. Заранее спасибо.
Арифметика указателя, приводящая к обратным адресам вне существующего объекта, обычно имеет * неопределенное поведение *. –
'0x0' - _null pointer_. Это не означает, что он использует представление всех битов нуль. Вы не можете направить на адрес '0' таким образом (это дефект в языке с самого его начала). – Olaf