Печать адреса переменной в виде строки

#c #operating-system #hex #printf

#c #операционная система #шестнадцатеричный #printf

Вопрос:

Во время ознакомления с курсом по операционным системам, который я прохожу, я наткнулся на этот код, и у меня возникли проблемы с пониманием второй части print (%s — amp;i).

 unsigned int i = 0x00646c72;
printf("H%x Wo%s", 57616, amp;i);
  

Это приводит к выводу:

 He110 World
  

Первая часть — это просто шестнадцатеричное представление числа, как i бы получился адрес 'rld' ?

Комментарии:

1. (57616)16 = E110, это объясняет He110

Ответ №1:

Адрес в конечном итоге не был ‘rld’.

Это работает, потому что %s ожидает указатель на char (указывающий на строку char, заканчивающуюся нулем). И потому, что amp;i указывает на i, который является байтами 0x72, 0x6C, 0x64, 0x00 . Которая представляет собой строку символов ascii с нулевым завершением ‘r’, ‘l’, ‘d’.