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
相关产品推荐
相关产品推荐

