C 使用%x打印指针中包含的十六进制地址
我刚刚读了这篇短文,它很好地描述了指针。然而,作者说地址就是这些十六进制值,所以他用%x打印它,但当我这样做时,编译器不仅会警告我传递的是指针,而不是无符号的int,有时还会得到与地址根本不相似的东西(如1C)。谁能澄清一下这个问题吗?C 使用%x打印指针中包含的十六进制地址,c,pointers,memory-address,C,Pointers,Memory Address,我刚刚读了这篇短文,它很好地描述了指针。然而,作者说地址就是这些十六进制值,所以他用%x打印它,但当我这样做时,编译器不仅会警告我传递的是指针,而不是无符号的int,有时还会得到与地址根本不相似的东西(如1C)。谁能澄清一下这个问题吗?%x用于以十六进制打印值。虽然指针通常是用十六进制编写的,但对于使%x不匹配的指针,还有其他一些需要考虑的问题,如您看到的1C输出 %p用于指针,可能正是您要查找的内容。它将更好地格式化指针,因为它知道它是指针 1C是一个非常有效的十六进制输出,但是对于指针来说这
%x
用于以十六进制打印值。虽然指针通常是用十六进制编写的,但对于使%x
不匹配的指针,还有其他一些需要考虑的问题,如您看到的1C
输出
%p
用于指针,可能正是您要查找的内容。它将更好地格式化指针,因为它知道它是指针
1C
是一个非常有效的十六进制输出,但是对于指针来说这是很奇怪的,因为您希望在显示指针时发生某些特殊的事情,比如具有正确的长度
由于
%x
表示十六进制数,因此向其中传递指针将发出警告。它给出警告的一个原因是指针的大小不一定与无符号int相同。%x
用于以十六进制打印值。虽然指针通常是用十六进制编写的,但对于使%x
不匹配的指针,还有其他一些需要考虑的问题,如您看到的1C
输出
%p
用于指针,可能正是您要查找的内容。它将更好地格式化指针,因为它知道它是指针
1C
是一个非常有效的十六进制输出,但是对于指针来说这是很奇怪的,因为您希望在显示指针时发生某些特殊的事情,比如具有正确的长度
由于
%x
表示十六进制数,因此向其中传递指针将发出警告。它给出警告的一个原因是指针的大小不一定与无符号int相同。%x
需要无符号int
,传递任何其他内容都是UB
对于打印数据指针,有%p
可以打印void指针(类型void*
,转换不是可选的),通常使用十六进制表示法打印
如果您不满意,请考虑将指针转换为<代码> uTutpTrpT,并使用格式说明符宏>代码> PrxPPTR 或<代码> PrxPPTR <代码> > <代码> <代码>,以保证十六进制输出。
您甚至可以选择使用的大小写。
%x
需要一个无符号int
,传递任何其他内容都是UB
对于打印数据指针,有%p
可以打印void指针(类型void*
,转换不是可选的),通常使用十六进制表示法打印
如果您不满意,请考虑将指针转换为<代码> uTutpTrpT,并使用格式说明符宏>代码> PrxPPTR 或<代码> PrxPPTR <代码> > <代码> <代码>,以保证十六进制输出。
您甚至可以选择所使用的大小写。
%x
希望其相应的参数具有类型unsigned int
,这就是您获得警告和时髦输出的原因。使用%p
显示指针值:
T *p = some_pointer_value;
...
printf( "p = %p\n", (void *) p );
%p
要求其相应的参数具有类型void*
。在C语言中,这几乎是唯一应该显式地将指针投射到void*
的地方
编辑
我刚看了那页。请注意,代码示例很旧(编写于1990年左右),到处都使用K&R风格(1989年以前的标准)函数定义语法和隐式int
。它使用%x
来显示指针值,因为直到1989年标准才将%p
转换说明符添加到语言中
它不应该被用作现代C编程实践的模型
不过,他对指针的解释相当不错。
%x
希望其相应的参数具有类型unsigned int
,这就是为什么会得到警告和时髦的输出。使用%p
显示指针值:
T *p = some_pointer_value;
...
printf( "p = %p\n", (void *) p );
%p
要求其相应的参数具有类型void*
。在C语言中,这几乎是唯一应该显式地将指针投射到void*
的地方
编辑
我刚看了那页。请注意,代码示例很旧(编写于1990年左右),到处都使用K&R风格(1989年以前的标准)函数定义语法和隐式int
。它使用%x
来显示指针值,因为直到1989年标准才将%p
转换说明符添加到语言中
它不应该被用作现代C编程实践的模型
不过,他对指针的解释相当不错。如果使用积分格式(如%x或%u)操作指针,则会产生未定义的结果。%建议指针使用p。
就警告而言,%x需要一个无符号整数,并且您的变量的大小或对齐要求可能与无符号整数不同,因此您得到了警告。如果使用整数格式(如%x或%u)操作指针,则会得到未定义的结果。%建议指针使用p。 就警告而言,%x需要一个无符号整数,并且您的变量的大小或对齐要求可能与无符号整数不同,因此您得到了警告。值不能是“十六进制”。价值就是价值。同时,“十六进制”是一种表示人类消费价值的方式。“十六进制”是一种符号 但是,直接在指针上使用
%x
是非法的,因为%x
格式说明符需要无符号int
a