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