还剩21页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
课件第八章指针和引用C++•指针基础•指针与数组•引用•动态内存分配•指针和引用的常见错误01指针基础指针的定义指针是变量,用于存指针变量可以指向同储其他变量的地址类型的不同变量指针变量必须声明数据类型,例如int*p;表示p是一个指向整数的指针指针的声明和初始化指针的声明声明一个指针变量时,需要指定指针所指向的数据类型例如,int*p;声明了一个指向整数的指针变量p指针的初始化指针变量在声明的同时需要被初始化,即被赋予一个变量的地址例如,int a=10;int*p=a;,这里p指向了变量a的地址指针的运算取地址运算符用于获取变量的地址例如,int a=10;int*p=a;,这里a表示取变量a的地址,并将该地址赋值给指针变量p指针的算术运算指针可以进行加法、减法和比较运算例如,int a
[5]={1,2,3,4,5};int*p=a;,这里p指向数组a的第一个元素,p+1表示指向数组a的第二个元素02指针与数组数组的指针数组名可以看作指向数组第一个元素数组指针的算术运算可以用来遍历数的常量指针组元素可以通过指针进行数组元素的访问和修改二维数组的指针二维数组可以看作是多个一维通过二维数组的指针可以访问二维数组的指针算术运算可以数组的集合,每个一维数组可和修改二维数组的元素用来遍历二维数组的行和列以看作是包含多个指针的数组指针与字符串字符串在C中通常表示为字符数字符串字面值在内存中存储为只使用指针访问字符串中的字符时组,可以通过字符指针访问和修读字符数组,可以通过指向字符需要注意字符串结束符0,以避改字符串串字面值的常量指针来访问免访问越界03引用引用的定义和声明总结词引用是C中一个非常有用的特性,它为变量提供了一个别名,即通过引用,一个变量可以以另一个变量的名字来使用详细描述引用的定义和声明非常简单在C中,使用符号来定义一个引用例如,如果我们有一个变量int a,我们可以创建一个引用int ref=a;,此时ref就是变量a的引用,或者说别名引用与指针的区别总结词引用和指针在某些方面很相似,但它们之间存在重要的区别引用一旦被初始化,就不能再被重新指向另一个对象,而指针可以详细描述引用一旦被初始化,它就总是引用同一个对象,不能再指向另一个对象而指针可以在运行时改变它所指向的对象此外,引用必须在声明时初始化,而指针则可以在任何时候初始化引用在函数中的应用总结词在函数中,引用可以作为参数传递给函数,这有助于避免数据的拷贝,提高效率此外,引用还可以作为函数的返回类型详细描述当我们将引用作为参数传递给函数时,实际上传递的是对原始数据的直接访问,而不是数据的拷贝这有助于提高效率,特别是对于大型对象另外,如果我们希望函数返回一个对象的引用,我们可以使用引用作为返回类型例如,函数可以返回一个对内部数据的引用,这样调用者可以直接访问和修改这些数据04动态内存分配使用new和delete操作符new操作符用于在堆上动态分配delete操作符用于释放通过new使用new和delete时,需要包含内存,并返回指向新分配内存的操作符分配的内存头文件new指针动态内存与栈内存的区别动态内存分配在堆上,而栈内存分配在栈上动态内存分配和释放由程序员控制,而栈内存自动分配和释放动态内存分配的大小可以在运行时确定,而栈内存分配的大小在编译时确定内存泄漏和其避免方法01内存泄漏是指程序中动态分配的内存未被及时释放,导致内存浪费和程序性能下降02避免内存泄漏的方法包括使用智能指针、及时释放不再使用的内存、避免内存碎片化等05指针和引用的常见错误空指针引用总结词详细描述空指针引用是指试图访问一个未初始化在C中,如果一个指针被声明了,但没有的指针所指向的内存地址被初始化,它的值是随机的,也就是说它VS指向一个不确定的内存地址试图访问这个地址会导致程序崩溃或者未定义的行为为了避免这种情况,应该在使用指针之前先给它赋一个初始值,或者使用nullptr来初始化它野指针总结词野指针是指已经被释放的内存,但是指针的值没有被置为nullptr,仍然指向原来的内存地址详细描述当使用delete或free函数释放内存后,应该将指针设置为nullptr,以避免产生野指针如果指针的值没有被改变,它将仍然指向已经被释放的内存,试图访问这个内存会导致程序崩溃或者未定义的行为悬挂指针总结词详细描述悬挂指针是指指向已经释放的内存的指针,当一个数据结构的成员指针被释放后,该指而且这个指针是作为某个数据结构的成员被针就变成了悬挂指针如果这个数据结构还释放的被用来调用函数或者传递给其他函数,那么这个函数可能会误用这个悬挂指针,导致程序崩溃或者未定义的行为为了避免这种情况,应该在释放数据结构的成员之前,先将其设为nullptrTHANK YOU。