You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C语言中,如何通过int变量存储的结构体地址解引用结构体?

从存储在int变量的地址访问结构体的实现方法

首先明确前提:直接用int存储指针地址存在兼容性风险——64位系统中int一般是32位,而指针是64位,存进去会截断地址导致后续访问出错。更安全的做法是用标准库的intptr_t(需包含<stdint.h>),不过先按你当前用int的需求给出实现步骤。

示例结构体定义

先假设你有这样的结构体:

#include <stdio.h>

typedef struct {
    int id;
    char name[20];
} MyStruct;

步骤1:将结构体地址存入int变量

把结构体实例的地址强制转换为int类型后存入变量:

// 创建一个结构体实例
MyStruct user = {1001, "Bob"};
// 存储地址到int变量x
int x = (int)&user;

步骤2:将int转换为结构体指针

把存储地址的int变量强制转换为对应结构体的指针类型:

MyStruct *user_ptr = (MyStruct *)x;

步骤3:访问结构体成员

可以通过指针的->运算符直接访问成员,或者解引用指针后用.运算符访问:

// 用->访问(更常用)
printf("用户ID:%d\n", user_ptr->id);
printf("用户名:%s\n", user_ptr->name);

// 解引用后用.访问,效果一样
printf("用户ID:%d\n", (*user_ptr).id);

完整可运行代码

#include <stdio.h>
// 若使用安全的intptr_t,需添加下面这行
// #include <stdint.h>

typedef struct {
    int id;
    char name[20];
} MyStruct;

int main() {
    MyStruct user = {1001, "Bob"};
    int x = (int)&user;
    MyStruct *user_ptr = (MyStruct *)x;

    printf("通过存储在int的地址访问结构体:\n");
    printf("ID:%d\n", user_ptr->id);
    printf("Name:%s\n", user_ptr->name);

    // 更安全的写法(用intptr_t)
    // intptr_t x_safe = (intptr_t)&user;
    // MyStruct *user_ptr_safe = (MyStruct *)x_safe;
    // printf("安全写法访问:ID=%d, Name=%s\n", user_ptr_safe->id, user_ptr_safe->name);

    return 0;
}

重要提醒

  • 兼容性问题:64位系统下int的宽度不足以存储完整指针地址,必须用intptr_t(C标准定义的专门用于存储指针的整数类型)来替代int,否则会出现地址截断,导致指针指向非法内存。
  • 地址有效性:必须确保int变量里存储的确实是有效的结构体实例地址,否则访问会触发未定义行为(比如程序崩溃、输出乱码)。

内容的提问来源于stack exchange,提问作者Kamlesh Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:15:46