我发现自己想在函数调用的每个给定迭代中打印出指向内存地址的指针。我想看看内存中的位置是否在每次迭代时都线性地提前(因为我怀疑基于API的性质可能会出现这种情况)。在控制台中查看生成的十六进制日志对我没有方便的帮助,所以我更喜欢十进制值。打印这些地址的十进制值最简单的方法是什么?
要实现这一点,即使指针和int
大小不同,也可以使用:
#include <inttypes.h>
printf("%" PRIuPTR, (uintptr_t)some_pointer);
对于大多数目的,printf("ptr=%dn", p);
会这样做。当然,在学术上可能会有不起作用的情况,但99%的情况下都会好起来。
编辑:好的,所以printf("ptr=%lun", (unsigned long)p);
更安全,甚至%llu
更安全。
您应该将指针强制转换为整数类型。一个安全的方法是首先检查数据类型的字节大小:
if(sizeof(unsigned long) == sizeof(void *)) {
unsigned long base_10_address = (unsigned long)pointer;
printf("%lun", base_10_address);
}