宏定义和内联函数的学习


宏定义可以提高效率,但是宏不是函数。 预编译通过代码复制的方式代替函数调用,省去了诸如函数压栈等系统过程,从而提高了效率。但是由于宏定义仅仅是代码替换,所以引起很多问题。
#define  MAX(a,b)  (a) > (b) ? ( a) : (b)
result=MAX(A,B) +2  编译器对其解释为 (a) > (b) ? (a) : (b)+2 .导致该语句执行与预期不符。
宏定义的另一个缺点就是无法访问类的私有成员。

而内联函数通过把代码直接复制进调用函数体内,避免产生某些系统过程,同样提高了效率,但是 内联函数可以进行类型检查,this指针同样能应用,这是宏定义无法比拟的。

内联函数必须是函数的声明和定义一体,且在函数前面加inline


内存的三种分配方式:静态存储区分配,栈上分配,堆上分配。

内存使用常见错误

(1)内存分配不成功,却使用它。对策:使用前检查内存是否为NULL。

(2)内存分配成功,但没有初始化就使用它。对策:内存分配后初始化。

(3)内存分配成功且已经初始化,但是越界。对策:做越界检查。

(4)忘记释放内存,造成内存泄漏。对策:内存动态分配和释放必须成双配对。

(5)释放了内存却继续使用它。

(a)对象关系过于复杂,理不清楚究竟释放了没有。

(b)return指向栈内存的指针或引用。

(c)free或delete内存后,没有把指针置为NULL。导致野指针。

指针与数组。数组名对应着(而不是指向)一块内存,在生存期内,其地址不可改变,只能是数组内容改变。

sizeof():

sizeof(数组)= 数组元素个数*sizeof(数组的元素数据类型)。

sizeof(指针)= 4;

数组作为参数传递时,数组名自动退化为指针类型,即sizeof(数组)=4;

sizeof(结构体或者类):这个有点麻烦,和编译器的设置有关系,pragma pack(n)是编译器指定的内存字节对齐方式,sizeof(结构或者类)和pragma pack(n)关系密切,默认的n=8,结构中的成员占用的内存起始地址为成员的数据类型的大小和n相比较的较小值。

指针参数

不要让指针参数在函数体内部申请内存,如果非要指针在函数体内部申请内存,就要用指针的指针。函数的返回值不能使用栈内分配的变量地址。

野指针:用malloc和new 分配了内存,就得用free和delete 释放,否则造成内存泄漏,但是只释放内存还是不够安全的,必须在释放内存后,让指针指向NULL,才不至于造成野指针。我理解的野指针就是没有正确指向的指针。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HAProxy介绍及配置文件详解

一、HAProxy简介 HAProxy是一个开源的、高性能的、基于TCP和HTTP应用的负载均衡软件,借助HAProxy可快速、可靠地提供基于TCP和HTTP应用的负载均衡解决方案 二、HAProxy优点 1) 可靠性和稳定性非常好,可以与硬件的F5相媲美2) 最高可以同时维护40000--5000…

unbutu安装搜狗输入法【转载】

安装支持库 sudo apt-get install fcitx libssh2-1 如果安装过程中出现错误失败,运行apt-get -f install 查看支持库是否安装成功 dpkg -l | grep fcitx dpkg -l | grep libssh 下载搜狗输入法 wget "http://pinyin.sogou.com/linux/download.php?flinux&…

深入理解halcon相机标定

目录相机标定简介深度说明1、相机标定参数介绍2、标定板详细介绍问题1:halcon是否只能使用halcon专用的标定板?问题2:halcon标定板如何生成?问题3:halcon标定板如何摆放,拍照数量有无限制?标定步…

halcon模板匹配干扰边缘消除办法(最硬核方式)

目录halcon手绘形状匹配模板手绘形状匹配模板主要算子解析draw_nurbs 绘制平滑曲线参数解释create_shape_model_xld 使用XLD轮廓创建模板参数解释实例演示与解析实例代码展示与解析运行过程与处理展示读入图像绘制模板使用绘制的XLD创建模板查找模板博主写作不容易,…

往文件中写数据--增量

有的功能需要打印日志文件,但是日志文件太多不方便查看,我就把信息输出到一个TXT文件中了。 下面就是我将要说的,往文件中写数据(增量),代码很简单,也可以放在你的代码中运行一下: /…

SQL Server 数据库查找重复记录的几种方法

http://www.hanyu123.cn/html/c61/6790.html 一、查某一列(或多列)的重复值。(只可以查出重复记录的值,不能查出整个记录的信息) 例如:查找stuid,stuname重复的记录: select stuid,s…

xvid 数据编码和解码

由于视频开发的需求,封装xvid c调用接口,使之优雅易用 我已经对pc camera视频流(RGB)进行尝试,编码之后传输到远程主机进行解码回放,效果不错 具体的xvid的参数可以进一步优化,这里只是提供简单的范例 1. xvid 解码 …

第一个PowerShell脚本——PowerShell三分钟(九)

前面把基础知识讲了一遍,现在我们开始写一个最初级的脚本写脚本的工具有很多,有文本文档,有PowerShell ISE,PowerShell Studio等,这里选用系统自带的PowerShell ISE这里大家依然要记得以管理员身份运行,否则…

C#精准定时

文章目录简介StopWatch类例子1,用作延时例子2,用作算法耗时评估博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 我们在自动化上位机编写过程中,上位机的定时应用在很多地方。对于工业上位机程序设计起…

联合体(union)和结构体(struct)的区别

1. 联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名{ 数据类型 成员名; 数据类型 成员名; ... } 联合变量名; 联合表示几个变量公用一个内存位置, 在不同的时间保存不同…

MVC架构简介及其测试策略

最近在WEB端测试工作中陷入了瓶颈,单纯的手动功能测试在没有成熟的代码规范之前还是很容易坑的,WEB自动化测试一时半会还没有什么进展,所以决定先学习一下网站用的MVC架构,跟着教程写了一个小网站,大概也找到了WEB测试…

prototype与_proto_

1、prototype与_proto_ ①prototype:是函数才有的属性,这个属性是一个指针。当一个构造函数被创建时,该构造函数会自动生成一个prototype指针,该指针指向构造函数的原型。这个原型会有其他实例共享的一些属性和方法。 ②_proto_&a…

Halcon求取矩形顶点坐标

文章目录简介Halcon源码博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 我们在使用Halcon画矩形时,并不能得到矩形四角顶点坐标。但是我们可以通过数学计算得到矩形定点坐标的位置。 我们在计算过程中需要知道矩形的长轴与短…

kafka常用的shell命令

kafka常用shell命令: ------------------------------------ 1、创建topic bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 2、查看创建的topic bin/kafka-topics.sh --list --zookeeper localhost:…

python+pycharm+Django报错

报错&#xff1a; Unhandled exception in thread started by <function wrapper at 0x2d7e410>Traceback (most recent call last):File "/root/virtual_dir/wxwebapp_court_nositepkg/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, i…

C++多线程实例(_beginThreadex创建多线程)

C多线程&#xff08;二&#xff09;(_beginThreadex创建多线程) C/C Runtime 多线程函数一 简单实例&#xff08;来自codeprojct&#xff1a;http://www.codeproject.com/useritems/MultithreadingTutorial.asp&#xff09; 主线程创建2个线程t1和t2&#xff0c;创建时2个线程…

halcon求取区域顶点

文章目录简介Halcon源代码处理效果博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 使用halcon求取顶点的方法。 Halcon源代码 read_image (Image1, 1.png)points_foerstner (Image1, 1, 2, 3, 200, 0.3, gauss, false, RowJunctions, …

从excel表中生成批量SQL,将数据录入到数据库中

excel表格中有许多数据&#xff0c;需要将数据导入数据库中&#xff0c;又不能一个一个手工录入&#xff0c;可以生成SQL&#xff0c;来批量操作。1.首先在第二行的H列&#xff0c;插入函数&#xff1a;CONCATENATE("INSERT INTO book (bookid, title, volume, author, u…

HDU-5895 Mathematician QSC

题目大意&#xff1a; 已知f[0] 0, f[1] 1, f[i] f[i-1] * 2 f[i-2]&#xff0c;且g[n] g[n-1] f[n] * f[n]&#xff0c;现在给出n&#xff0c;y&#xff0c;x&#xff0c;s&#xff0c;问你x^(g[n*y]) mod (s 1)的值为多少。 解题思路&#xff1a; 首先可以得到的是g[n…

C#的两种类据类型:值类型和引用类型

目录什么是值类型&#xff0c;什么是引用类型概念&#xff1a;值类型和引用类型区别什么是值类型&#xff0c;什么是引用类型 概念&#xff1a; 值类型直接存储其值&#xff0c;而引用类型存储对其值的引用。部署&#xff1a;托管堆上部署了所有引用类型。 引用类型&#xf…