2014-10-20 2 views
-4

Что означает 0x%08x в приведенном ниже описании?Что означает выражение?

printf("\t\t\t[in func3] i @ 0x%08x = %d\n", &i, i); 

Означает ли это, предварять результат с 0x и дать шестнадцатеричное значение 8 цифр?

+1

Это означает, что для печати в нижнем регистре шестнадцатеричное ('% ... x'), 4 байт (8 цифр,' 08'), с ведущими нулями, с '0x' раньше. – AntonH

+4

Так что да, ваше предположение верно и может быть подтверждено документацией. –

+0

Вы должны прочитать документацию в строках формата 'printf'. Это обширная документация, которая охватывает это. – lurker

ответ

0
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

+1

Действительно, для указателя '% p' был бы лучшим выбором. –

+0

@GregHewgill: Да. Добавлено предложение, дающее единственный действительный спецификатор для указателей. – Deduplicator

Смежные вопросы