原理
- 将各种类型的指针地址存到 long 变量之中,就可以方便地在不同函数之间传递,绕过函数形参的类型检查。
- 在32位CPU上,long与指针变量都是占4字节;在64位CPU上,long与指针变量都是占8字节。因此,使用 long 型变量保存指针地址可以兼容32位CPU和64位CPU。
- 进一步地,将long变量的值转换成字符串之后,就可以方便地在不同进程之间传递指针,或者保存到文本中。
示例
#include <stdio.h>
int main(){
// 创建一个指针
char str[]="Hello";
printf("%p\n", str);
// 显示为:0x7fffbc9e0630
// 将任意类型的指针转换成long型变量
long addr = (long)str;
printf("%lx\n", addr);
// 显示为:7fffbc9e0630
// 将long型变量转换成任意类型的指针
char *p = (char *)addr;
printf("%s\n", p);
// 显示为:Hello
// 将long型变量打印到字符串中
char buffer[20];
sprintf(buffer, "%lx", addr);
printf("%s\n", buffer);
// 显示为:7fffbc9e0630
// 从字符串中读取long型变量
long addr2 = 0;
sscanf(buffer, "%lx", &addr2);
printf("%lx\n", addr2);
// 显示为:7fffbc9e0630
return 0;
}
该示例的运行结果如下: