从指针打印地址时%lx和%ld之间有什么区别?

时间:2014-10-06 19:42:13

标签: c

我已经尝试使用Google搜索第一个%lx,但我没有很好的结果,但我已经成功搜索了%ld,这只是long int。我想打印地址是必要的,但是%lx是什么?

这是我感到困惑的地方:

int main()
{
    int value = 25;
    int *pointer = &value;
    printf("%ld\n", pointer);  // prints out the address of variable value( I hope)
    printf("0x%lx\n", pointer); // Completely confused here, is this perhaps address in hex?
}

如果有人能清除我所遇到的这种困惑,那会很棒!

我已经运行了这段代码,我有结果,但我仍然不确定lx做了什么..我在谷歌认真尝试用谷歌搜索这个“%lx”,但没有结果解释它。

编辑:如果我使用'p'打印地址那么我认为%ld打印地址是错误的吗?困惑。

2 个答案:

答案 0 :(得分:17)

他们都是未定义的行为。

要使用printf打印指针,您应该将指针强制转换为void *并使用"%p"

话虽如此:

我们可以在尝试打印整数时讨论"%ld""%lx"之间的区别。 %ld需要long int类型的变量,而%lx需要long unsigned int类型的变量。

或多或少,xodu之间的区别在于如何打印数字。

  • x以十六进制打印无符号数字。
  • o以八进制打印无符号数字。
  • u以十进制格式打印无符号数字。
  • d以十进制格式打印带符号的数字。
  • i以十进制格式打印带符号的数字。

我们可以将l附加到%lx等格式的格式字符串,以指定int而不是long int,我们正在使用unsigned long int(即, long int或{{1}})。

cppreference上有一个表格,其中包含其他信息:http://en.cppreference.com/w/c/io/fprintf

答案 1 :(得分:1)

%p%lx以十六进制打印地址,而%ld以十进制打印