还剩29页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《善于利用指针》课件ppt•指针概述•指针的声明与初始化•指针的运算•指针与数组•指针与函数目•动态内存分配•指针常见错误与注意事项录contents01指针概述指针的定义指针是一种变量,用指针变量在声明时必于存储其他变量的地须明确其指向的数据址类型它包含一个内存地址,通过这个地址可以访问和修改变量的值指针的作用通过指针可以间接访问和修改指针可以用于实现复杂的数据指针可以用于动态内存分配和变量的值,提高代码的灵活性结构,如链表、树等释放,方便管理内存资源和可读性指针的分类01020304指向变量的指针指向数组的指针指向函数的指针指向结构体的指针存储一个变量的地址,通过该指向数组的首个元素的地址,存储一个函数的入口地址,可指向一个结构体的首地址,可指针可以访问和修改变量的值可以通过该指针遍历整个数组以通过该指针调用函数以通过该指针访问结构体的成员变量02指针的声明与初始化指针的声明指针的声明01在C语言中,指针是一种变量,用于存储其他变量的地址要声明一个指针,需要使用星号(*)和类型说明符例如,int*p;声明了一个指向整数的指针p指针的类型02指针的类型取决于它所指向的变量的类型例如,int*p;中的“int”表示p是一个指向整数的指针指针的名称03指针的名称可以任意命名,但为了代码的可读性,建议使用有意义的名称指针的初始化指针初始化的目的初始化指针是为了让它指向一个有效的内存地址,避免野指针和未定义行为指针初始化的方法可以使用字面值、变量地址或其他指针来初始化指针例如,int x=10;int*p=x;,这里p指向变量x的地址空指针未初始化的指针是一个空指针,它不指向任何有效的内存地址空指针不同于NULL指针,空指针的值是不确定的,而NULL指针是一个特殊的常量,表示空指针指针的赋值指针赋值的含义指针赋值的方法指向同类型变量的指针赋值将一个变量的地址赋值给一个使用“”运算符获取变量的如果两个同类型的变量地址不地址,并将其赋值给指针例指针,使该指针指向该变量的同,可以将一个变量的地址赋如,int x=10;int*p;p=地址值给另一个同类型的指针例x;,这里p指向变量x的地址如,int x=10;int y=20;int*p1=x;int*p2=y;,这里p1和p2分别指向x和y的地址03指针的运算指针的算术运算指针算术运算包括指针的加法、减法、指针加法运算可以用于将两个指针所乘法和除法指向的内存地址相加,得到一个新的地址指针减法运算可以用于计算两个指针指针乘法和除法运算在编程中很少使之间的距离,或者计算一个指针相对用,因为它们对指针所指向的内存地于另一个指针的偏移量址没有实际意义指针的关系运算关系运算符通常用于循环、排序和查关系运算符用于比较两个指针的值,找等算法中,以实现对数组或链表的包括等于、不等于、大于、小于等遍历和操作通过关系运算符可以判断两个指针是否指向同一个内存地址,或者判断一个指针是否在另一个指针之前或之后指针的位运算位运算符可以对指针所指向的内位运算符可以用于实现内存地址位运算符在底层编程和硬件交互存地址进行位操作,包括按位与、的位级别的操作,例如设置、清中比较常用,但在高级编程中较按位或、按位异或等除或翻转某个内存位的值少使用04指针与数组数组的指针数组名即指针在C语言中,数组名实际上是一个指向数组第一个元素的指针数组指针的算术运算可以通过对数组指针进行算术运算来访问数组中的元素数组指针与多维数组多维数组可以看作是嵌套的一维数组,通过指针可以方便地访问二维或更高维度的数组元素通过指针访问数组元素010203解引用操作符指针的移动指针与数组索引使用解引用操作符(*)通过改变指针的值,可以可以通过指针加上偏移量可以获取指针所指向的值访问数组中的其他元素来访问数组中的特定元素,类似于使用索引访问数组元素数组作为函数参数传递数组传递数组指针函数返回数组在函数调用时,可以将整另一种方式是通过传递指函数可以返回一个数组,个数组作为参数传递给函向数组第一个元素的指针通过指针可以访问该数组数来传递整个数组中的元素05指针与函数返回指针的函数返回指针的函数是指函数返回一个指针变量的地址,通常用于动态内存分配和数据结构的创建返回指针的函数可以返回局部变量的地址,但需要注意局部变量在函数执行完毕后会被销毁,因此返回的地址是无效的返回指针的函数通常用于返回数组、结构体等复杂数据类型的地址,以便在函数外部访问和操作这些数据传递指针的函数传递指针的函数是指函数接受一传递指针的函数可以用于修改函传递指针的函数在处理大型数据个或多个指针参数,通过指针来数外部的变量,或者用于实现更结构时特别有用,通过传递指针访问和修改传递进函数的变量高效的数据传递可以避免数据的复制,提高程序的效率函数指针函数指针是指指向函数的指针变量,可以用来存储函数的地址,以便在程序中调用该函数函数指针可以用于实现回调函数、实现动态函数调用等高级功能使用函数指针需要了解函数的原型和返回值类型,以确保正确地调用和返回值06动态内存分配使用`malloc`和`calloc`分配内存calloc用于在堆区动态分配指定数量的元malloc素,每个元素占用指定字节数,并返回一个指向分配内存的指针用于在堆区动态分配指定字节数的内存空间,返回一个指向分配内存的指针注意事项使用`malloc`和`calloc`分配的内存需要手动释放,否则会导致内存泄漏使用`realloc`调整内存大小realloc用于重新分配已分配内存的大小,可以扩大或缩小内存块的大小注意事项使用`realloc`调整内存大小时,如果传入的指针为NULL,则等同于调用`malloc`;如果传入的指针不是由`malloc`、`calloc`或`realloc`返回的,则行为是未定义的使用`free`释放内存free用于释放之前通过`malloc`、`calloc`或`realloc`动态分配的内存注意事项使用`free`释放内存后,指针本身并没有被置为NULL,因此再次使用该指针会导致未定义行为为了避免这种情况,应该在使用完动态分配的内存后将指针置为NULL07指针常见错误与注意事项野指针总结词野指针是指未初始化的指针,其指向的位置是随机的,因此容易导致程序崩溃或未定义行为详细描述野指针的产生通常是因为程序员疏忽,未对指针进行初始化或未正确释放内存野指针可能导致程序出现异常、崩溃或数据损坏,因此在使用指针之前,一定要确保指针已经被正确初始化并指向有效的内存地址悬挂指针总结词悬挂指针是指指向已释放内存的指针,其值是NULL或者未定义,使用悬挂指针会导致程序错误详细描述在C语言中,当使用free函数释放内存后,应将指针设置为NULL以避免悬挂指针的问题如果未将指针设置为NULL,则可能导致程序错误地访问已释放的内存,从而引发各种问题因此,在使用完动态分配的内存后,一定要确保将指针设置为NULL空指针解引用总结词空指针解引用是指试图访问空指针所指向的内存地址,这会导致程序崩溃或未定义行为详细描述空指针是指值为NULL的指针,如果试图通过空指针来访问内存地址,就会发生空指针解引用错误这种错误通常发生在试图访问数组元素、调用函数等操作中为了避免这种错误,程序员应该在使用指针之前检查其是否为NULL,确保指针指向有效的内存地址THANK YOU。
个人认证
优秀文档
获得点赞 0