Что означает 0x%08x
в приведенном ниже описании?Что означает выражение?
printf("\t\t\t[in func3] i @ 0x%08x = %d\n", &i, i);
Означает ли это, предварять результат с 0x
и дать шестнадцатеричное значение 8 цифр?
Что означает 0x%08x
в приведенном ниже описании?Что означает выражение?
printf("\t\t\t[in func3] i @ 0x%08x = %d\n", &i, i);
Означает ли это, предварять результат с 0x
и дать шестнадцатеричное значение 8 цифр?
printf("\t\t\t[in func3] i @ 0x%08x = %d\n", &i, i);
Есть два формата-строки здесь, и соответствующие аргументы:
%08x
в 0x%08x
: Распечатайте int
/unsigned
с 8 шестнадцатеричных цифр, включая ведущие нули (после 0x
).
%#08x
будет проще для того же.
В любом случае, это Undefined Behavior в качестве указателя не является int
.
Используйте %p
для печати указателя данных после преобразования в void*
, char*
, unsigned char*
или signed char*
.
Другой - %d
для печати int
в стандартной десятичной системе обозначений, поэтому будем надеяться, что i
действительно один.
Для справки, здесь человек-страница printf
: http://man7.org/linux/man-pages/man3/printf.3.html
Действительно, для указателя '% p' был бы лучшим выбором. –
@GregHewgill: Да. Добавлено предложение, дающее единственный действительный спецификатор для указателей. – Deduplicator
Это означает, что для печати в нижнем регистре шестнадцатеричное ('% ... x'), 4 байт (8 цифр,' 08'), с ведущими нулями, с '0x' раньше. – AntonH
Так что да, ваше предположение верно и может быть подтверждено документацией. –
Вы должны прочитать документацию в строках формата 'printf'. Это обширная документация, которая охватывает это. – lurker