C++的指针学习
来源:互联网 发布:查英语单词的软件 编辑:程序博客网 时间:2024/06/06 03:49
C++交流群:197321069
一,指针的特性
(1)指针可以指向一个对象
(2)指针可以指向一个消失的对象(It can point to the location just immediately past the end of an object);//这句话翻译的
(3) 指针可以是一个空的,这说明它不指任何一个对象
(4)指针可以指向一个无效的值;这个值是以上三种情况之外的。
二,nullptr是一个常量,它可以转化为任何指针类型,NULL是一个预处理符号,它表示的是0
注意:所有的指针必须要初始化。
三,指针和引用
引用不是一个对象,一个引用只能属于一个固定的地址,而指针可以指向不同的地址。
四,在所有的条伯判断中,即在if(*ptr)的条件中,如果指针指向的值不是0,也可以是对象 ,即为真(true),如果为零即false
五,指针的比较
如果两个指针指向的地址一向,则两个指针相等,如果两个指针都为null,这两个指针也相等。
六,void* point;它可以指针任何对象的地址,但是这个对象地址的类型是不知道的。
七,C++必须定义复制构造函数的情况
先看一段代码:
class CMessage{private:char* pmessage;public:void ShowIt() const{cout <<endl <<pmessage;}CMessage(const char* text = "Defaut message"){pmessage = new char[strlen(test) + 1];strcpy_s(pmessage,strlen(text) + 1,text);}~CMessage(){delete[] pmessage;//这里是数组,所以在带[]}};int main(){CMessage motto1("Radiation fades your genes.");CMessage motto2(motto1);//这里会有问题}
在上面的代码中,会出现一个问题,在main函数中,CMessage motto2(motto1) ,这段代码会调用类的默认复制构造函数,将对象motto1的指针成员存储的地址复制到motto2中,因为默认复制构造函数实现的复制过程只是将原来对象的数据成员中存储的复制到新对象中,因此,这两个对象将共享仅有的一个文本字符串。因此,在任何一个对象中对字符串进行的修改,也会修改另一个对象,因为两个对象共享相同的字符中,如果销毁motto1,那么motto2的指针将指向已经被释放,现在可能用于其他对象的内存区域,因此肯定会发生混乱。当然,如果删除motto2,也会出现相同的问题。
因此,为了解决这个问题,只要提供一个复制构造函数来代替默认版本:
CMessage(const CMessage& aMess){size_t len = strlen(aMess.pmessage) + 1;pmessage = new char[len];strcpy_s(pmessage,len,aMess.pmessage);}这样就可以了。
所以必须记住一点:如果动态地为本地C++类的成员分配空间,则必须实现复制构造函数。
- C 指针的学习
- C语言-指针的学习
- Objective-c的指针学习
- C语言的指针学习
- [C++]1.指针的学习
- c语言学习,指针函数、函数指针、指针的指针、指向指针数组的指针
- c语言学习,指针函数、函数指针、指针的指针、指向指针数组的指针
- C 语言指针,单指针和双指针的学习
- C学习笔记 11 指针的减法
- 强化C语言的指针类型学习
- 【C语言学习】指针的初始化
- 【学习】C++(2)指针的引用
- 每天学习的点滴--c和指针
- 黑马程序员-c语言指针的学习。
- 关于C指针的学习总结
- 学习C指针的心得随笔
- 学习C语言的指针总结
- C语言的指针学习指导
- jQuery学习--Chapter04小结(jQuery操作DOM)
- csharp中DateTime总结
- android 下拉菜单
- VisionMobile:2014年Q1移动开发者经济报告(九)3.3、平台忠诚度的问题
- windows下安装redis
- C++的指针学习
- Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案
- MySQL基础知识---------Latin1
- 异常机制及throw与throws的区别
- 设置TOMCAT启用GZIP压缩
- spring 定时器
- boldSystemFontOfSize 和 systemFontOfSize 的区别
- ServerSocket与Socket介绍
- Ice Session的使用