《c语言指针上课课件.pptx》由会员分享,可在线阅读,更多相关《c语言指针上课课件.pptx(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言指针上课课件目录指针基础指针与数组指针与函数指针高级话题指针常见错误与安全问题实战练习01指针基础指针的定义010203指针是一个变量,其存储的是另一个变量的地址,而不是该变量的值。指针变量通常用“*”符号表示,并使用“&”符号获取其他变量的地址。指针变量可以指向任何数据类型,包括基本数据类型、结构体、联合体等。声明指针变量时,需要指定其指向的数据类型,例如int*p;表示p是一个指向整数的指针。初始化指针变量时,需要将其设置为某个变量的地址,例如intx=10;int*p=&x;表示p指向x的地址。未初始化的指针变量可能指向任何位置,因此在使用前必须进行初始化。指针的声明与初始化可以通
2、过加减法对指针进行运算,例如p表示指针向后移动一个单位(通常是所指向数据类型的大小),p-表示指针向前移动一个单位。指针的算术运算可以通过比较运算符对指针进行比较,例如if(p=q)表示判断两个指针是否相等。指针的比较运算可以将一个类型的指针转换为另一种类型的指针,例如int*p;float*q=(float*)p;表示将整型指针p转换为浮点型指针q。指针的强制类型转换指针的运算02指针与数组数组名可以视为指向数组第一个元素的指针数组名+整数n表示指向数组中第n个元素的指针可以通过指针进行数组元素的访问和修改数组的指针使用*运算符通过指针访问数组元素通过指针修改数组元素的值指针的算术运算可以用
3、于遍历数组元素通过指针访问数组元素字符串可以视为字符数组字符串常量会在内存中分配一个字符数组,并返回指向该数组第一个元素的指针使用指针访问和修改字符串中的字符指针与字符串03指针与函数010203传递地址通过指针作为函数参数,可以将变量的地址传递给函数,从而在函数内部直接修改变量的值。提高效率通过传递地址,避免了数据的复制,提高了函数的执行效率。灵活的参数传递指针作为参数可以传递任意类型的数据,包括结构体、数组等复杂数据类型。指针作为函数参数通过返回指针的函数,可以在函数内部动态分配内存,并返回指向该内存的指针。动态内存分配自定义数据结构实现复杂功能返回指针的函数可以用于创建自定义的数据结构,
4、如链表、树等。返回指针的函数可以用于实现复杂的功能,如文件操作、网络通信等。030201返回指针的函数函数指针是指向函数的指针变量,可以通过函数指针来调用函数。指向函数的指针函数指针在很多场合下可以作为回调函数使用,例如在排序算法、事件驱动编程等场景中。回调函数通过函数指针和虚函数表等技术,可以实现动态绑定和多态性,这是面向对象编程的重要特性之一。实现动态绑定函数指针04指针高级话题 指针与内存管理内存地址指针是一个变量,存储的是其他变量的内存地址。通过指针可以间接访问和修改变量的值。内存分配C语言中,内存分为堆和栈两部分。堆是动态分配的内存,而栈是自动分配的内存。指针可以用于在堆上动态分配内
5、存。内存释放使用指针进行动态内存分配后,需要手动释放不再使用的内存,以避免内存泄漏。ABDCmalloc函数使用malloc函数可以在堆上动态分配指定大小的内存,并返回一个指向该内存的指针。calloc函数calloc函数与malloc函数类似,但calloc函数会初始化分配的内存为零。realloc函数realloc函数用于重新分配已分配的内存大小。它可以改变已分配内存的大小,并返回新的指针。free函数使用free函数可以释放已分配的内存,避免内存泄漏。动态内存分配三级指针三级指针是指向二级指针的指针。通过三级指针,可以改变指针所指向的指针的值或地址。二级指针指向指针的指针是指向指针变量的
6、指针。通过二级指针,可以改变指针所指向的值或地址。动态二维数组使用二级和三级指针,可以在运行时动态创建二维数组,并方便地修改数组元素的值或地址。指向指针的指针05指针常见错误与安全问题野指针是指未初始化的指针,其指向的位置是随机的,因此访问野指针会导致程序崩溃或未定义行为。总结词在C语言中,指针变量在使用之前必须进行初始化,否则其指向的位置是未知的。如果一个指针被声明了,但没有被初始化,那么它就是一个野指针。试图访问野指针指向的内存会导致程序崩溃或产生未定义行为,这是非常危险的。为了避免野指针的问题,程序员应该在使用指针之前确保对其进行初始化,或者使用NULL指针来初始化。详细描述野指针总结词
7、内存泄漏是指程序在申请动态内存后,未能正确释放,导致内存资源不断被占用,最终可能导致程序耗尽可用内存而崩溃。要点一要点二详细描述在C语言中,动态内存的申请和释放是由程序员手动管理的。如果程序员在申请动态内存后未能正确释放,就会导致内存泄漏。内存泄漏不仅会导致程序占用过多内存,还可能引发其他问题,如性能下降、程序崩溃等。为了避免内存泄漏,程序员应该在使用完动态内存后及时释放,并使用工具如Valgrind进行内存泄漏检测。内存泄漏总结词空指针解引用是指试图访问空指针所指向的内存位置,这会导致程序崩溃或未定义行为。详细描述在C语言中,空指针是指值为NULL的指针。如果一个指针被设置为NULL,那么它
8、就不再指向任何有效的内存位置。如果程序员试图通过一个空指针来访问内存,就会发生空指针解引用。空指针解引用会导致程序崩溃或产生未定义行为,这是非常危险的。为了避免空指针解引用的问题,程序员应该在使用指针之前检查它是否为NULL,确保指针指向有效的内存位置。空指针解引用06实战练习冒泡排序原理通过相邻元素之间的比较和交换,将较大的元素逐渐往后移动,最终实现数组排序。指针在冒泡排序中的应用使用指针来指向数组元素,通过交换指针所指向的元素来达到排序的目的。利用指针实现冒泡排序代码实现cvoidbubbleSort(int*arr,intn)利用指针实现冒泡排序for(inti=0;in-1;i)for
9、(intj=0;j*(arr+j+1)利用指针实现冒泡排序03(arr+j)=(arr+j+1);01/交换*(arr+j)和*(arr+j+1)02inttemp=*(arr+j);利用指针实现冒泡排序*(arr+j+1)=temp;利用指针实现冒泡排序123利用指针实现冒泡排序利用指针实现冒泡排序二分查找原理:在有序数组中,取中间元素作为比较对象,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。利
10、用指针实现二分查找指针在二分查找中的应用:使用指针来指向数组元素,通过比较指针所指向的元素来达到查找的目的。利用指针实现二分查找代码实现cintbinarySearch(int*arr,intleft,intright,intx)利用指针实现二分查找while(left=right)intmid=left+(right-left)/2;利用指针实现二分查找if(*(arr+mid)=x)利用指针实现二分查找returnmid;elseif(*(arr+mid)next=(*head_ref);/将新节点指向当前头节点(或空)(*head_ref)=new_node;/将头指针指向新节点,完成插入操作new_node-data=new_data;/将新数据存储在新节点中利用指针实现链表操作利用指针实现链表操作谢谢聆听