Прежде всего printf("\naddress of x is %x",&x);
неверно. %x
ожидает unsigned int
.
Правильный спецификатор формата для печати адреса: %p
( подробнее здесь ):
printf("\naddress of x is %p",&x);
//To be more precise cast to void*, see @Gerhardh's comment below
printf("\naddress of x is %p", (void*)&x);
Почему длина адреса переменной всего 6 цифр в шестнадцатеричном коде, хотя моя машина 64-битная?
unsigned long x = 10;
printf("%lu", x); //prints 10
x
равно 10 в приведенном выше примере. Означает ли это, что x
теперь имеет ширину 8 бит? Нет. Точно так же существует диапазон адресов, начинающийся с 0, адрес не должен быть достаточно большим, чтобы всегда быть представлен как полный 64-битный. В вашем случае это может быть 0x00407970
.
Примечание: Следующее будет иметь неопределенное поведение , если значение x
велико. Просто введите 123123
в качестве ввода и посмотрите, что произойдет
int square(){
return x*x;
}