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

C语言typedef struct指针定义与指向同一结构体的技术疑问

关于C语言typedef struct指针使用的两个问题解答

问题1:为何person *personPtr, person1;后还需要personPtr = &person1;

在C语言的声明语法里,*是绑定到变量名的,不是类型的一部分。所以person *personPtr, person1;这行代码的实际含义是:

  • 声明一个person*类型的指针变量personPtr
  • 同时声明一个person类型的结构体实例person1

这时候personPtr只是一个未初始化的野指针,它的指向是随机的,并没有和person1产生任何关联。必须通过personPtr = &person1;把person1的内存地址赋值给personPtr,才能让这个指针真正指向person1的存储空间。

问题2:创建指向person1的第二个指针,避免多余的person2浪费内存

你原来的写法person *personPtr2, person2;会同时声明指针personPtr2和一个完全没用的结构体实例person2,确实会占用额外内存。正确的实现方式有两种:

方式1:单独声明指针并直接指向person1

// 直接声明指针并赋值为person1的地址
person *personPtr2 = &person1;

方式2:先声明指针,再赋值(如果需要和已有的指针关联)

// 只声明指针变量,不创建多余的结构体
person *personPtr2;
// 可以直接指向person1,或者指向已有的personPtr(效果一样)
personPtr2 = &person1;
// 或者 personPtr2 = personPtr;

修改后的完整示例代码:

typedef struct _person {
   int age;
   float weight;
   int test;
} person;

int main()
{
    person *personPtr, person1;
    personPtr = &person1;   
    // 只声明第二个指针,不创建无用的person2
    person *personPtr2 = personPtr;   

    person1.test = 5;
    personPtr->age = 72;
    personPtr2->weight = 150;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:43:14