深入理解 C 指针阅读笔记 -- 第六章

Chapter6.h

#ifndef		__CHAPTER_6_
#define		__CHAPTER_6_

/*《深入理解C指针》学习笔记 -- 第六章*/

typedef struct __person
{
	char* name;
	char* title;

	unsigned int age;
}person;

/*结构体内存的释放问题*/
void __struct_memory_test();

#endif

Chapter6.cpp

#include "Chapter6.h"
#include <stdio.h>
#include <malloc.h>
#include <string.h>

/*结构体内存的释放问题*/
/*对于结构体内存在指针的情况,我们需要注意怎样正确的使用这个结构体*/
void __struct_memory_test()
{
	/*第一种使用结构体的方式*/
	person ps;

	/*需要为结构体内的指针分配内存才能存储值*/
	ps.name = (char*)malloc(sizeof(char) * 16);
	strcpy(ps.name, "DLUTBruceZhang");

	ps.title = (char*)malloc(sizeof(char) * 10);
	strcpy(ps.title, "DLUT");

	ps.age = 24;

	/*使用完之后需要释放结构体指针的内存*/
	free(ps.name);
	free(ps.title);

	/*第二种使用结构体的方式*/
	person* ps2;

	/*
		首先,需要为结构体申请内存,但是这里需要注意的是,只是为这个结构体申请
		内存,结构体内的其他指针需要另外申请别的内存
	*/
	ps2 = (person*)malloc(sizeof(person));

	/*需要为结构体内的指针分配内存才能存储值*/
	ps2->name = (char*)malloc(sizeof(char) * 16);
	strcpy(ps2->name, "DLUTBruceZhang");

	ps2->title = (char*)malloc(sizeof(char) * 10);
	strcpy(ps2->title, "DLUT");

	ps2->age = 24;

	/*
		使用完内存后需要释放掉,这里需要注意的是释放内存的顺序
		首先应该释放结构体内指针指向的内存,这里是没有先后顺序的,
		但是,释放整个结构体的内存一定是最后一步
	*/
	free(ps2->name);
	free(ps2->title);

	free(ps2);
}
时间: 2024-08-09 19:49:56

深入理解 C 指针阅读笔记 -- 第六章的相关文章

构建之法阅读笔记05-第六章

阅读笔记 第六章:敏捷流程 第六章敏捷流程主要介绍了什么是敏捷流程及其原则,还有什么时候可以选择敏捷的开发方法,什么时候选择其他方法. 敏捷的流程是指一系列价值观和方法论的集合.介绍了一些敏捷开发原则,比如,经常发布可用的软件,业务人员和开发人员在项目开发过程中应该每天共同工作,面对面的交流始终是最有效的沟通方式,不断关注技术和设计,保持简明,团队要学会自我管理,时时总结如何提高团队效率,并付诸行动. 敏捷流程的方法论---Scrum方法论.首先第一步需要找出完成产品需要做的事情,然后决定当前的

深入理解 C 指针阅读笔记 -- 第一章

上周末,我在图书馆看到了这本很薄的书 -- <深入理解 C 指针>       这本书中写的内容,个人感觉适合一个初学者,内容不是很难.我也读了下,对每一章都做了笔记,笔记都是用代码的形式贴出来. Chapter1.h #ifndef __CHAPTER_1_ #define __CHAPTER_1_ /*<深入理解C指针>学习笔记 -- 第一章*/ /*一个数如果是无符号的,那么尽量去选用 size_t 类型*/ /*使用 size_t 类型的时候一定要用对了输出格式*/ voi

Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable

酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑海,有郁闷抓狂的,有出成果喜极而涕的,有不知前途在哪儿的迷茫与不安……总的来说,近一年来,不白活,不虚度,感触良多,不是一言两语能说得清道的明的,有时间可以做个总结,下面还是言归正传谈技术吧. 上篇在了解了Hadoop的目录和源码结构后,说好的要啃源码的,那就得啃.也感谢一直以来关注我.支持我的网友

&lt;深入理解C指针&gt;学习笔记和总结 第四章 指针和数组

数组是一个什么玩意: 数组和指针我的理解,有相同之处也有不同之处.因有相同之处,因此一些资料上说,数组和指针本质是相同的.因有不同之处,因此也有一些资料上说,数组和指针是不一样的. 相同之处: 数组名字和指针名字都代表了一个地址. 如:int num[10];num是数组名.函数开辟了一个存储十个整数类型的空间,而num是他们的首地址. int *p; p=(int *)malloc(10*sizeof(int));类似的,p也指向了首地址. 不同之处是,num[10]中的空间位置是在栈中,而

《Microsoft Sql server 2008 Internals》读书笔记--第六章Indexes:Internals and Management(1)

<Microsoft Sql server 2008 Internals>索引目录: <Microsoft Sql server 2008 Internals>读书笔记--目录索引 在第五章主要学习了table的内部存储结构,第七章<Special storage>中将继续深入学习存储机制,那将是本书最难理解的一章.第六章主要介绍index的基础知识,第八章是<query Optimizer>,下面我们先来看看第六章:Indexes:Internals an

C++PRIMER 阅读笔记 第三章

本章主要介绍 string vector 和 bitset, 不能贪多,现在本文主要介绍 string 与 vector 头文件中最好不要使用namespace std, 因为头文件会直接被预处理器放置到C中 std::string 的构造方式: string s1; string s2(s1); string s3("value");string s4(n,'c');           第三种构造方式可有"\0"? cout 与 cin 可以直接操作string

MySQL cookbook读书笔记第六章

1,修改MySQL中的日期的格式 在显示一个日期值时,如果没有特别指定,MySQL按照ISO格式显示日期即(CCYY-MM0DD).如果不希望按照MySQL的默认格式输出时间和日期值,可以使用date_format()或者time_format()函数按照用户期望的格式重写日期或者时间值 date_format(),time_format()和str_to_date()三个函数都接受格式化串作为参数: 2,设置客户端时区 如果客户端和服务器处在不同的时区,那么客户端在服务器上保存timestam

人月神话阅读笔记—第三章

人月神话阅读笔记-第三章 一个由一流人才组成的小型的精干的队伍比由一群平庸的程序员组成的大型团队更有效率,但是这里面有一个重要的问题:如何在有意义的进度安排内创建大型的系统. 优秀的程序员和较差的程序员之间生产效率的差距是巨大的,当一个10人的精干团队进行开发,和一个100个人的平庸程序员进行开发,前者的效率更高.但是对于效率和概念的完成性来说,最好由少数干练人员开发,而大型系统需要大量人员进行开发,但是这两者是有矛盾的,需要进行平衡. 在开发过程中,可以使用一种崭新的开发方案,类似于外科医生做

《Linux Shell脚本攻略》 笔记 第六章:打包压缩

<Linux Shell脚本攻略> 笔记 第六章:打包压缩 //1.打包.解包 [[email protected] program_test]# tar -cf output.tar 11.txt 22.txt 33.txt [[email protected] program_test]# tar -xf output.tar -C ./tar-file/  //-C指定要提取到哪个路径? //列举出归档文件中的内容 [[email protected] program_test]# ta