我已经尝试使用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打印地址是错误的吗?困惑。
答案 0 :(得分:17)
要使用printf打印指针,您应该将指针强制转换为void *
并使用"%p"
。
我们可以在尝试打印整数时讨论"%ld"
和"%lx"
之间的区别。 %ld
需要long int
类型的变量,而%lx
需要long unsigned int
类型的变量。
或多或少,x
,o
,d
和u
之间的区别在于如何打印数字。
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
以十进制打印