指针和结构体

本文详细介绍了C/C++中结构体的两种声明方式,包括使用`struct`关键字和`typedef`,以及内存分配、指针操作、内存释放和避免malloc/free开销的方法。特别强调了结构体内存管理的重要性和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构体的两种声明方式

利用struct关键字声明:

struct heheda
{
  char*firstname;
  char*lastname;
  char*title;
  unsigned int age;
};

利用type声明

typedef struct heheda
{
  char*firstname;
  char*lastname;
  char*title;
  unsigned int age;
}HEHEDA;

实例化

HEHEDA he;

声明一个HEHEDA的指针并分配内存

HEHEDA *ptrhe;
ptrhe=(HEHEDA*)malloc(sizeof(HEHEDA ));

利用实例访问的时候用"."

he.age=23;

利用结构体指针访问的时候用"->"

ptrhe->age=23;
//也可以解引后再用"."
(*ptrhe).age=23;

为结构体分配内存

结构体的内存至少是各个字段的长度和,不过实际上要大于这个和,因为结构体的各个字段之间可能会有填充。某些数据类型需要对齐到特定边界就会产生填充。

  • 要谨慎的使用指针的算术运算
  • 结构体数组的元素之间可能存在额外的内存

在这里插入图片描述

结构体的释放问题

在为结构体分配内存的时候,系统不会自动的为结构体内部的指针分配内存。类似,当结构体消失时,系统也不会自动释放结构体内部的指针指向的内存。

typedef struct heheda
{
  char*firstname;
  char*lastname;
  char*title;
  unsigned int age;
}HEHEDA;

//声明了一个变量,但是3个指针里面包含的是垃圾信息
//即3个指针变量没有被分配内存。
HEHEDA ptr;

/*所以,记住如果动态分配给3个指针变量指向内存,
一定要记得释放空间,防止导致内存泄漏。*/
/*如果用到了结构体指针,动态分配结构体的内存
,在释放3个指针变量指向的内存空间,不要忘记 
释放结构体指针指向的内存空间。*/

避免malloc/free的开销

分配一个表来维护结构体

#define length 10
HEHEDA * list[length];
/*
①、先将list这个表初始化,全部赋值NULL;
②、当我们需要结构体时,可以在list里面找非NULL
的元素返回,如果没有非NULL元素,那么将
创建返回一个新的实例。
③、当我们不需要结构体的时候,可以把结构体返回
到表,如果list有NULL元素,就把结构体指针放在
那里,如果没有NULL了,就要释放结构体内的指针,
然后再释放结构体。
*/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值