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

C语言中如何打印结构体指针成员指向的值并将obj->id指向整型变量

问题解决:结构体指针的取值与赋值

没问题,我来帮你理清这两个问题,直接上解决方案和细节解释:

一、打印obj.id指向的值

你之前用printf("%p\n", obj.id)输出的是指针本身存储的内存地址(也就是obj.id这个指针变量的值),而要获取它指向的整型数据,必须用**解引用操作符***来访问指针指向的内存内容:

printf("%d\n", *obj.id);

这里要注意运算符优先级:.(成员访问)的优先级比*(解引用)更高,所以obj.id会先被求值得到指针,再通过*拿到它指向的整数。

你之前直接用printf("%d\n", obj.id)出现警告,是因为%d期望接收一个int类型的参数,但obj.id是int*(整型指针)类型,类型完全不匹配——直接传指针本身是在传地址值,而不是地址里存储的整数,所以必须通过解引用转换类型。

二、让obj.id指向某个整型变量

假设你有一个普通整型变量int num = 10;,只需要把这个变量的内存地址赋值给obj.id即可,用取地址操作符&:

int num = 10;
obj.id = # // 将num的地址赋值给obj.id,此时obj.id就指向num的内存空间了

完成赋值后,*obj.id就等价于num,修改其中一个的值,另一个也会同步变化。

完整可运行代码示例

#include <stdio.h>

struct c {
    int *id;
    int type;
} obj;

int main() {
    // 让obj.id指向整型变量num
    int num = 42;
    obj.id = &num;

    // 打印指针指向的整型值
    printf("obj.id指向的值:%d\n", *obj.id);
    // 打印指针本身存储的地址(标准写法是转成void*避免编译器警告)
    printf("obj.id存储的内存地址:%p\n", (void*)obj.id);

    return 0;
}

额外注意事项

  • 一定要确保obj.id指向有效的内存后再解引用,如果它是NULL或者野指针(指向未分配/已释放的内存),直接解引用会导致程序崩溃或触发未定义行为。
  • 使用%p打印指针地址时,C语言标准要求参数是void*类型,所以最好显式转换(void*)obj.id,避免部分编译器抛出警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:33:14