还剩27页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《指针和引用》课程目标理解指针的概念掌握指针的操作了解指针的本质、用途和局限性学习指针的声明、初始化、运算和间接访问熟悉指针与数组、字符串的联系了解指针在处理数组和字符串时的应用什么是指针内存地址直接访问数据类型指针是存储内存地址的变量指针允许程序直接访问和操作内存中的数据指针可以指向不同类型的数据,例如整数、浮点数或字符串指针的声明和初始化数据类型指针必须声明其指向的数据类型变量名指针变量的名称地址符获取变量的内存地址指针的运算加减运算1指针可以进行加减运算,但加减的是地址偏移量,而非数值比较运算2指针可以进行比较运算,比较的是指向的地址大小赋值运算指针可以进行赋值运算,将一个指针指向另一个指针指向的地址3指针的间接访问解引用运算符1使用星号*获取指针指向的内存地址的值示例2int*ptr=#int value=*ptr;间接访问3通过指针修改指针指向的内存地址的值指针和数组数组元素地址指针访问元素数组名代表数组首元素的地址,也就是第一个元素的内存地址使用指针访问数组元素时,指针指向特定元素的地址,可以通过解引用运算符*获取元素值指针与字符串字符串指针字符数组12指针可以指向字符串的第一个字符数组可以用来存储字符串字符指针可以用来访问字符指针可以指向字符数组的第串中的字符,也可以用来改变一个元素,从而访问字符串中字符串的内容的所有字符字符串函数3C语言提供了一系列字符串函数,这些函数可以用来操作字符串指针可以与字符串函数一起使用,实现更强大的字符串操作二级指针二级指针是指向指针的指针它存储了另一个指针的地址使用两个星号*声明二级指针int**ptr;二级指针可以用来访问指针指向的变量的值,以及修改指针本身的值例如int a=10;int*p=a;int**q=p;这里q是二级指针,它指向p指针,而p指向a变量什么是引用引用是C++中的一种别名机制,它为已存在的变量创建了一个新的名字引用就像一个变量的别名,它直接指向变量本身,而不是指向变量的内存地址引用在使用上与变量类似,但它不能独立存在,必须绑定到一个已存在的变量上引用的声明和初始化语法1数据类型引用名=变量名;示例2int ref=num;注意事项3必须在初始化时绑定变量引用的应用作为函数参数,提高效率和安全性避免指针的复杂性和潜在风险简化代码,提高可读性和维护性指针和引用的区别指针是存储地址的变量,引用是对象的别名指针可以为空,引用必须初始化,不能为指针有大小,引用没有大小,它的大小与所null引用的对象相同动态内存分配内存管理在程序运行时,动态分配内存,而不是在编译时灵活性程序可以根据需要分配和释放内存,可以处理未知大小的数据指针使用指针来管理动态分配的内存地址和运算符new delete运算符运算符new delete12在堆上动态分配内存释放堆上分配的内存动态内存分配示例使用`new`运算符分配内存,并使用`delete`运算符释放内存示例代码int*ptr=new int;*ptr=10;delete ptr;该代码示例展示了如何动态分配一个整数类型的内存空间,并将值10存储到该内存空间最后使用`delete`运算符释放分配的内存函数中的指针传递指针1将指针作为参数传递给函数,可以修改函数外部的变量值返回指针2函数可以返回指向变量或内存块的指针指针数组3数组中的每个元素都是指针,指向不同的内存地址函数中的指针使代码更灵活,可以操作变量的内存地址,并传递指向数据的引用函数中的引用传递引用1通过引用传递参数可以让函数直接修改原始变量的值,避免了对原始变量的复制,提高了效率避免复制2引用作为函数参数时,实际上是传递了原始变量的地址,因此不会进行复制,节省了内存空间增强灵活性3使用引用可以方便地修改多个变量的值,例如在交换两个变量的值时指针作为函数参数传递地址修改原值动态内存分配函数参数可以是指针类型,这样可以将变函数可以通过指针修改原始变量的值,这指针作为参数可以方便地传递动态分配的量的地址传递给函数使函数可以对外部数据进行操作内存地址,用于管理动态内存引用作为函数参数传递参数提高效率使用引用传递参数,可以将函数避免了复制大型数据结构,节省内部的修改直接反映到调用函数了内存和时间的变量上清晰代码代码更易读,因为参数的修改可以直接在函数内部完成数组和指针的关系数组名作为指针指针运算与数组下标数组名可以作为指针使用,指向数组的第一个元素指针加减运算可以访问数组中的元素,等效于使用数组下标指针和引用的安全性指针和引用提供对内存的直接访问,但也可能导致安全问题使用指针时,要格外小心内存越界和野指针问题引用可以避免悬挂指针,但也不能完全杜绝内存泄漏问题指针的常见陷阱空指针野指针内存泄漏指针越界访问空指针会导致程序崩溃野指针指向已释放的内存,使没有释放动态分配的内存会导访问数组越界会导致程序崩溃使用前必须初始化或检查指针用会导致程序崩溃使用前必致内存泄漏,最终导致程序性,因为指针可能会访问到不应是否为空须检查指针是否有效能下降甚至崩溃该访问的内存区域引用的常见陷阱悬空引用无法修改引用12引用必须初始化,否则会造成引用本身不能被修改,只能修悬空引用,导致程序崩溃改它所引用的对象的值引用和指针混淆3引用与指针有区别,不可混淆使用指针和引用的最佳实践选择合适的工具避免悬垂指针根据需要选择指针或引用,考虑确保指针始终指向有效内存,避其优缺点免访问已释放的内存谨慎使用指针运算使用关键字const指针运算需要小心,避免越界访使用const关键字修饰指针或引用问,确保指针指向有效内存,防止意外修改指向的值实际编程案例1使用指针来实现链表数据结构,并演示如何使用指针来遍历链表此案例可以帮助理解指针的实际应用以及指针在动态内存分配中的重要性实际编程案例2使用指针来实现字符串的逆序操作,即把字符串中的字符顺序反转例如,将字符串hello逆序为olleh指针可以指向字符串的第一个字符,然后通过指针移动来访问字符串中的其他字符通过循环遍历字符串,将每个字符与字符串末尾的字符交换,即可实现逆序操作实际编程案例3链表操作函数参数传递动态内存分配使用指针实现链表的插入、删除、遍历等操使用引用传递参数,避免数据复制,提高效利用指针和new/delete,灵活管理内存空间作率课程总结指针引用动态内存分配指针是内存地址的抽象,提供了一种直接操引用是变量的别名,提供了对同一数据值的动态内存分配允许程序在运行时申请和释放作内存的方式另一种访问途径内存,提高了程序的灵活性。
个人认证
优秀文档
获得点赞 0