高质量C++/C编程指南 -- 第7章 内存管理 P2

关于《高质量C++/C编程指南》 这本书是林锐博士写于2001年7月,现在都2012年了,相隔10年多, 用了两天时间看完这个100页的书,里面几乎没有废话,全是精炼的总结性的东西, 思路顺畅,语言流畅,看起来不费劲。 一共11章,其中1-6章的内容,和我自己的习惯是一致的,看此书之前已经是我的习惯了, 看了之后更加印证了正确性。 第7章,内存管理,我认为这一章是正本书中最精华的部分,是给我帮助最大的一部分。 8-11章对我的启发介于前两者之间。 以下是我觉得比较重要,或者说容易忘记的几条(因为可能不常用),列出来以备以后查阅, 阅读详情

http://www.bccn.net/Article/kfyy/cjj/jc/200512/2634_2.html

 

7.3.1 修改内容

示例7-3-1中,字符数组a的容量是6个字符,其内容为hello\0。a的内容可以改变,如a[0]= ‘X’。指针p指向常量字符串“world”(位于静态存储区,内容为world\0),常量字符串的内容是不可以被修改的。从语法上看,编译器并不觉得语句p[0]= ‘X’有什么不妥,但是该语句企图修改常量字符串的内容而导致运行错误。

char a[] = “hello”;

a[0] = ‘X’;

cout << a << endl;

char *p = “world”; // 注意p指向常量字符串

p[0] = ‘X’; // 编译器不能发现该错误

cout << p << endl;

示例7-3-1 修改数组和指针的内容

7.3.2 内容复制与比较

不能对数组名进行直接复制与比较。示例7-3-2中,若想把数组a的内容复制给数组b,不能用语句 b = a ,否则将产生编译错误。应该用标准库函数strcpy进行复制。同理,比较b和a的内容是否相同,不能用if(b==a) 来判断,应该用标准库函数strcmp进行比较。

语句p = a 并不能把a的内容复制指针p,而是把a的地址赋给了p。要想复制a的内容,可以先用库函数malloc为p申请一块容量为strlen(a)+1个字符的内存,再用strcpy进行字符串复制。同理,语句if(p==a) 比较的不是内容而是地址,应该用库函数strcmp来比较。

// 数组…

char a[] = "hello";

char b[10];

strcpy(b, a); // 不能用 b = a;

if(strcmp(b, a) == 0) // 不能用 if (b == a)

…

// 指针…

int len = strlen(a);

char *p = (char *)malloc(sizeof(char)*(len+1));

strcpy(p,a); // 不要用 p = a;

if(strcmp(p, a) == 0) // 不要用 if (p == a)

…

示例7-3-2 数组和指针的内容复制与比较

 

《高质量C编程指南》读后感 今天看《高质量C编程指南》最大的体会是一个书名:细节决定成败1、以前写代码心态不对:为了图省事或者为了尽快实现所需要的功能,尽管知道某些做法存在隐患,但还是忽略了它,今后在编程中要戒除急功近利的思想2、以前缺乏写高质量代码的意识:以前编写代码以实现的具体功能为目的,考虑代码质量问题甚少3、以前调试程序只是知道最基本的debug查看内存变化是否是自己预期值的方法,只能说是略知皮毛,没有掌 阅读详情

相关推荐

《高质量C/C++编程指南》学习笔记

这本书只有短短100页,可是却可以称得上是脍炙人口。一年前初读此书时就感觉受益良多,而今再次重读,仍然不肯停顿一口气读完。针对书中指出的一些编程规则和建议,摘录下个人认为比较好的部分。 第1章 文件结构 为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。 用 #include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。 用 #incl

Hao_09的专栏 2296

高质量C++/C编程指南[7]

 第7章 内存管理              欢迎进入内存这片雷区。伟大的Bill Gates 曾经失言:640K ought to be enough for everybody — Bill Gates 1981程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需

天高路远 542

NHANES数据库的介绍及使用(一)

一、数据库概况 NHANES(National Health and Nutrition Examination Survey)是一项旨在评估美国成人和儿童健康和营养状况的研究计划,计划始于20世纪60年代初期,是一项针对不同人群或健康主题的调查。 1999年该调查成为一项持续计划,涉及各种健康和营养测量,项目每年调查一个全国代表性的样本,约5000人,这些人群位于全国各县,每年对其中15个县进行访问。 NHANES访谈部分包括人口统计学、社会经济学、饮食和健康相关问题。体检部分包括生理测量、实验室检查等

Christina 5万+

高质量C++/C编程指南 -- 第7章 内存管理 P7

http://www.bccn.net/Article/kfyy/cjj/jc/200512/2634_7.html   7.11 new/delete 的使用要点 运算符new使用起来要比函数malloc简单得多,例如: int *p1 = (int *)malloc(sizeof(int) * length); int *p2 = new int[length]; 这是因为new内

-----------------------------不要在跟自己无关的事情上浪费时间 602

快速上手CH340N电路设计(CH340N USB转串口模块 USB Type-C接口 CH340系列芯片讲解)

一、上模块 二、功能分析 l 芯片:CH340N l 输入接口:USB、TYPE-C l 输出接口:TTL(5V\3.3V\GND\TX\RX) l 指示灯:电源、TX、RX 三、CH340x芯片 l CH340 是一个 USB 总线的转接芯片,实现 USB 转串口 l 全速 USB 设备接口,兼容 USB V2.0 l 硬件全双工串口,内置收发缓冲区,支持通讯波特率 50bps~2Mbps l 支持常用的 MODEM 联络信号 RTS、DTR、DCD、RI、DS...

东小东博客 5万+

给排水工程师的SWMM初体验:从软件界面到第一个简单模型的保姆级上手教程

本文为给排水工程师提供SWMM软件的保姆级上手教程,从界面解析到创建第一个简单模型,详细介绍了SWMM的核心功能和操作步骤。通过30分钟的实践指导,帮助新手快速掌握雨水管网建模的基本技能,提升工作效率。

weixin_28736355的博客 323

P2C项目正式开启!!!

众所周知C++C++C++和PascalPascalPascal是OIerOIerOIer常用的两种语言。但由于语法不同,很多P党都不愿意转C++C++C++。因此本人在此启动一个项目:P2CP2CP2C1项目。 项目名称: P2CP2CP2C 项目编号: 001001001 项目等级: the&amp;amp;amp;amp;amp;nbsp;most&amp;amp;amp;amp;amp;nbsp;importantthe\ most\ importantthe&amp;amp

无 1872

利用python-docx提取word的高亮部分

利用python-docx提取word的高亮部分 没有找到分享的文档,于是就自己研究了一下。 可以通过python里的python-docx去提取word内的高亮文本。 file=docx.Document(filepath) for para in file.paragraphs: for i in para.runs: #i.font.highlight_color设置了高亮颜色 if i.font.highlight_color is not None:

double_0221的博客 1810

高质量C++/C编程指南

SEPG google 2 4 2001-07-18T11:49:00Z 2003-03-18T18:27:00Z 2003-03-18T18:27:00Z 79 10873 61977 SBell 516 123 76112 9.2812

romandion的专栏 2196

ST-LINK调试STM32H743必看:CubeMX工程中缺失的这行代码导致程序跑飞

本文深入剖析了使用ST-LINK调试STM32H743时,因CubeMX工程中缺失电源电压档位配置代码而导致程序跑飞或出现“Can not access memory”错误的问题。文章解释了H7系列电源与时钟耦合的核心原理,提供了具体的代码修复方案和系统化的调试排查思路,帮助开发者从根本上解决这一常见调试困境。

weixin_29191669的博客 281

Python开发MCP Client

全部例子只是MCP Client访问MCP Server的过程,那么这样其实就失去了MCP协议的创建的初衷,和大模型集成后才能发挥MCP最大的作用。

Criss@陈磊 2973

读书笔记-高质量C++/C编程指南-第7章 内存管理

  【序】最近痛下决心要好好学习下C和C++,以为即将来临的求职做点准备,在网上搜野指针的问题时看到了《高质量C++/C编程指南》,对于我这种想从事嵌入式开发的人来说,犹如收获到一本编程的bible似的。此文对C和C++编程的风格及注意事项进行了精妙的分析,集合了Thinking in C++、Effective C++等经典书籍的主要内容,实乃至宝啊本人对此文进行了研读,红色部分是我

Sailor_forever 1580

【数据结构】考点二十八 : 二叉树的概念:二叉树的度、完全二叉树、满二叉数结点数、哈夫曼结点数、完全二叉树的深度

二叉树(Binary Tree)是一种常见的数据结构,它或者为空(null),或者由一个根节点(root node)和两个子树(left subtree 和 right subtree)组成,这两个子树又分别是一棵二叉树。二叉树的每个节点最多有两个子节点,通常称为左子节点(left child)和右子节点(right child)。

超越的博客 1738

高质量C++/C编程指南 -- 第7章 内存管理 (1)

高质量C++/C编程指南 -- 第7章 内存管理 (1)程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。7.1内存分配方式内存分配方式有三种:(1)       从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内

tattarrattat的专栏 1068

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

高质量C++/C编程指南 -- 第7章 内存管理 (2)

高质量C++/C编程指南 -- 第7章 内存管理 (2)7.7 杜绝“野指针”“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。“野指针”的成因主要有两种:(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气

tattarrattat的专栏 964

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++内存管理 && 读高质量C++/C编程指南第7章

C++中的内存管理是很值得学习一下,非常容易出错

weixin_43164548的博客 1814

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

高质量C++/C编程指南 -- 第7章 内存管理

第7章 内存管理欢迎进入内存这片雷区。伟大的Bill Gates 曾经失言: 640K ought to be enough for everybody — Bill Gates 1981 程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办

gzblog的专栏 617

高质量C++/C编程指南(七)内存管理

一、内存的分配方式 二、常见的内存错误及其对策 三、指针参数是如何传递内存的? 1、如果非得要用指针参数去申请内存,那么应该用“指向指针的指针”。 2、用函数返回值来传递动态内存 四、free和delete把指针怎么啦? 五、动态内存会被自动释放吗? 六、杜绝“野指针' 七、内存耗尽怎么办? 八、malloc/free的使用要点 1、malloc 2、free 九、new/delete的使用要点 1、new 2、delete 十、一些心得体会

Exp.Joker 750

高质量c++/c编程指南—内存管理篇

以下是阿鲤对高质量c++/c编程指南的读书笔记及自己的理解,分享出来希望对大家有用。这里是第七章的内容: 1:内存的分配方式。 2:常见的内存错误及其对策。 3:指针与数组的对比。 4:指针参数是如何传递内存的? 5:free和delete把指针怎么啦? 6:动态内存会自带释放吗? 7:杜绝“野指针” 8:有了malloc/free为什么还要new/delete 9:内存耗尽怎么...

belongHWL的博客 332

高质量C++/C编程指南 -- 第7章 内存管理 P5

http://www.bccn.net/Article/kfyy/cjj/jc/200512/2634_5.html   7.9 内存耗尽怎么办? 如果在申请动态内存时找不到足够大的内存块,malloc和new将返回NULL指针,宣告内存申请失败。通常有三种方式处理“内存耗尽”问题。 (1)判断指针是否为NULL,如果是则马上用return语句终止本函数。例如: void Func(vo

-----------------------------不要在跟自己无关的事情上浪费时间 1168

林锐C语言--高质量C/C++编程(第七章内存管理)

这是因为指针p的类型以及它的内存的容量事先都是知道的,语句free(p)能正确地释放内存。在malloc的"()"中使用sizeof运算符是良好的风格,但要当心有时我们会昏了头,写出 p = malloc(sizeof §)这样的程序来。指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来高质量 C++/C 编程指南,操作动态内存。别看 free 和 delete 的名字恶狠狠的(尤其是 delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。

千月星跡 1245
上一篇: 高质量C++/C编程指南 -- 第7章 内存管理 P1
下一篇: 高质量C++/C编程指南 -- 第7章 内存管理 P3
sergery
博客等级 码龄18年 113粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值