【C++从0到1】70、C++中结构体中的指针

C++从0到1全系列教程

1、结构体中的指针

struct string
	{
		char *ptr;   // 指向动态分配内存的地址。
		......
	}
  • 如果结构体中的指针指向的是动态分配的内存地址:
    • 对结构体用sizeof运算可能没有意义。
    • 对结构体用memset()函数可能会造成内存泄露。
    • C++的字符串string中有一个指针,指向了动态分配内存的地址。

2、示例代码

struct st_message         // QQ报文/消息结构体
{
	int srcqq;                   // 发送方的QQ号码。
	int dstqq;                   // 接收方的QQ号码。
	char context[1024];  // 消息内容。
};

int main()
{
	st_message message;   // 创建QQ报文/消息结构体变量。

	while (true)
	{
		memset(message, 0, sizeof(message));   // 清空QQ报文/消息结构体。
		// 接收QQ报文/消息。
		// 处理QQ报文/消息。
		// 把QQ报文/消息发送给接收方。
	}

	// 其它代码。
}

#include <iostream>         // 包含头文件。
using namespace std;        // 指定缺省的命名空间。

struct st_t
{
	int   a;
	int *p;
};

int main()
{
	st_t stt;                           // 创建结构体变量。
	memset(&stt, 0, sizeof(st_t));

	stt.a = 3;
	stt.p = new int[100];     // 动态创建一个长度为100的整型数组,让指针stt.p指向数组的地址。

	cout << "sizeof(stt)=" << sizeof(stt) << endl;

	cout << "调用前:stt.a=" << stt.a << ",stt.p=" << stt.p << endl;
	// memset(&stt, 0, sizeof(st_t));
	stt.a = 0;      // 清空成员a。
	memset(stt.p, 0, 100 * sizeof(int));    // 清空成员p指向的内存中的内容。
	cout << "调用后:stt.a=" << stt.a << ",stt.p=" << stt.p << endl;

	delete [] stt.p;                // 释放动态分配的内存。
}

#include <iostream>         // 包含头文件。
using namespace std;        // 指定缺省的命名空间。

struct st_girl
{
	string name;      // 超女姓名。
};

int main()
{
	st_girl girl;                           // 创建结构体变量。

	girl.name = "西施";
	cout << "girl.name=" << girl.name << endl;

	// memset(&girl, 0, sizeof(girl));

	girl.name = "好大的西瓜";
	cout << "girl.name=" << girl.name << endl;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值