0

C89 标准是否允许我将 void * 转换为 ptrdiff_t 以便我可以将内存位置打印为十六进制?

例如:

static const char *dig = "0123456789abcdef";
char buf[16], *ptr = buf; /* Need 16 bytes when sizeof(void *) == 8 */
void *val;
ptrdiff_t tmp = (const unsigned char *) val - (const unsigned char *) 0;

do {
    *buf++ = dig[tmp & 0xf];  
    tmp >>= 4;  
} while (tmp);  

do {  
    putc(*--ptr);  
} while (ptr > buf);  

上下文:我正在内核空间中编写一个 printf() 函数。

4

0 回答 0