第7章 C++世界的奇人异事 在武侠小说中,初入武林的毛头小子总是要遇到几位奇人,发生几件异事,经过高人的指点,经历一番磨炼,方能武功精进,从新手成长为高手.在C++世界,同样有诸多的奇人异事.在C++世界中游历学习的我们,是否也同样期望着遇到几位奇人,经历几件异事,而后从一个C++新手成长为C++高手呢? 武林中的奇人异事可遇而不可求,但是C++世界中的奇人异事却可以为你一一引见. 7.1  一切指针都是纸老虎:彻底理解指针 C++世界中什么最难?指针!C++世界中什么最强?指针! 指针作为C…
指针的引用(*&)与指针的指针(**) 在下列函数声明中,为什么要同时使用*和&符号?以及什么场合使用这种声明方式? void func1( MYCLASS *&pBuildingElement ): 论坛中经常有人问到这样的问题.本文试图通过一些实际的指针使用经验来解释这个问题.仔细看一下这种声明方式,确实有点让人迷惑.在某种意义上,"*"和"&"是意思相对的两个东西,把它们放在一起有什么意义呢?. 为了理解指针的这种做法,我们先复…
本文转载而来,转载出处:http://www.cppblog.com/doing5552/archive/2010/09/28/127994.html 在下列函数声明中,为什么要同时使用*和&符号?以及什么场合使用这种声明方式?  void func1( MYCLASS *&pBuildingElement ): 论坛中经常有人问到这样的问题.本文试图通过一些实际的指针使用经验来解释这个问题.仔细看一下这种声明方式,确实有点让人迷惑.在某种意义上,"*"和"&…
关于指针,其是C语言的重点,C语言学的好坏,其实就是指针学的好坏.其实指针并不复杂,学习指针,要正确的理解指针. 指针是一种数据类型 指针也是一种变量,占有内存空间,用来保存内存地址 指针就是告诉编译器,开辟4个字节的存储空间(32位系统),无论是几级指针都是一样的 *p操作内存 在指针声明时,* 号表示所声明的变量为指针 在指针使用时,* 号表示操作指针所指向的内存空间中的值 *p相当于通过地址(p变量的值)找到一块内存:然后操作内存 *p放在等号的左边赋值(给内存赋值) *p放在等号的右边取…
前言 相信大多数的同学都是第一门能接触到语言是C/C++,其中的指针也是比较让人头疼的部分了,因为光是指针都能专门出一本叫<C和指针>的书籍,足见指针的强大.但如果不慎误用指针,这些指针很大可能就会像恶魔一样把你的程序给直接搞崩溃. 3个月前,我编写了一份这些指针都是恶魔吗?.c的文件,里面从大多数常用的指针类型,一路延伸到纯粹只是在窥探编译器所能产生的恐怖造物.为了增加趣味性,我还把这些指针都划分了段位,只有辨识出该段位绝大多数的指针才能升段.现在我要将这些恶魔般的指针公诸于世,欢迎大家前来…
[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, const 对象的引用 作者:webabcd 介绍不可或缺 Windows Native 之 C++ this 指针 对象数组 对象和指针 const 对象 const 指针和指向 const 对象的指针 const 对象的引用 示例1.CppEmployee 类CppEmployee.h #pragma…
c++多态性是依靠虚函数和父类指针指向子类对象来实现的.简单来说,父类中定义虚函数,父类指针指向子类对象,父类指针调用函数时调用的就是子类的函数. 父类没有定义虚函数,父类指针指向子类对象时,父类指针调用的函数还是父类的函数. dynamic_cast可以实现将子类指针动态转换成父类指针(相当于父类指针指向了子类对象),用dynamic_cast时,父类必须要有virtual声明的虚函数. 父类指针转换成子类指针(也就是子类指针指向了父类对象)是危险的,dynamic_cast失败会返回NULL…
本博客为原创,转载请注明出处,谢谢. 参考博文:Android系统的智能指针(轻量级指针.强指针和弱指针)的实现原理分析 C++中最容易出错的地方莫过于指针了,指针问题主要有两类,一是内存泄露,二是无效引用.new出来的对象忘记delete,造成这部分内存无法使用无法回收,引起内存泄露的问题:多个指针指向同一个对象,在一处delete之后,其他指针在不知情的情况下继续引起访问错误,甚至形成一个引发恶意攻击的漏洞. Android底层是由C++实现的,在指针和对象的管理上也下了不少的功夫,实现的智…
项目中用到,随手记一下: 1.二维数组.与指针 创建二维数组指针的方式: a.已知一维的大小 1 int **array=new int *[rows]; 2 (for int i=0;i<rows;i++) 3 array[i]=new int[colums]; 释放指针方式 1 for(int i=0;i<rows;i++) 2 delete array[i]; 3 delete []array; b.两维都未知: char **a; a = new char* [m]; a[] = ne…
数组指针是指一个指向数组的指针,例如有一个数组指针p指向一个数组a[],则 *p是取到这个数组,也就是说 *p=a,因此 **p =a[0], 它的定义为: ]; ]=&a; (*c)表示它是一个指针,若不加括号则变成 指针数组 ,[10]表示指向一个长度为10的数组,int 表示数组元素为int 因为函数不能返回数组,所以可以设置返回一个数组指针,即 auto fo2(]) -> ]{ a[]=; return &a; } int (&a)[10] 是一个数组引用, 这里定…