Чтобы отобразить каждый из четырех компонентных байтов значения int
, переданного (после приведения) к вашей функции show_bytes
(при условии, что вы хотите получить их в формате 0x01
), измените строку формата printf
следующим образом :
printf(" 0x%02x", (unsigned int)start[i]);
0x
печатается как есть; %02x
форматирует действительное значение start[i]
в шестнадцатеричном формате, всегда , используя ширину поля 2
и добавляя начальные нули, если необходимо.
Обратите внимание, что %x
В формате ожидается, что unsigned int в качестве соответствующего аргумента, поэтому я добавил приведение.
Вывод, который я получаю, когда запускаю ваш код (с моей предложенной модификацией): 1021 *
ival = 12345
address = 000000CE690FFA30
0x39 0x30 0x00 0x00
Что соответствует целому числу со следующим (полным) шестнадцатеричным значением: 0x00003039
- равным 12345
в десятичном виде.
Также обратите внимание, что если вы добавите следующая строка:
printf("address=%p", pval);
в вашей функции main
, вы увидите, что значение адреса pval
не совпадает со значением, напечатанным в вашей функции show_bytes
! Это потому, что вы передаете копию из ival
в show_int
, которая помещается (наиболее вероятно) в стек и, таким образом, фактически является переменной, отличной от оригинала (что pval
указывает на).