欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}

该示例的运行结果如下:
C语言指针地址与数字、字符串的转换