还剩32页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
新编C语言程序设计教程PPT第9章指针课件•指针的基本概念•指针与数组•指针与函数•动态内存分配•指针与结构体•指向指针的指针01指针的基本概念指针的定义指针是一种变量,用于存储内存地址01通过指针可以间接访问存储单元02指针变量在声明时必须指定所指向变量的类型03指针变量的声明与初始化声明指针变量使用*声明符来声明指针变量,例如int*p;声明了一个指向整数的指针变量p初始化指针变量将变量的地址赋值给指针变量,例如int x=10;int*p=x;,这里p指向了变量x的地址指针的运算取地址运算符用于获取变量的地址例如x表示变量x的地址指针算术运算指针可以与整数进行加减运算,例如p+1表示指针向后移动一个单位(通常是数据类型的大小),p-1表示指针向前移动一个单位指针也可以进行减法运算,例如p2-p1,表示两个指针之间的距离指针比较运算可以比较两个指针是否相等或不等,或者判断一个指针是否大于、小于或等于另一个指针例如if p==q表示判断两个指针是否相等02指针与数组数组的指针数组名本质上是指向数组第一个元素的指针1数组名可以作为指向数组的指针2数组指针可以指向数组中的任意元素3通过指针访问数组元素01使用指针访问数组元素时,需要先计算出元素在内存中的偏移量02通过指针的加法或减法运算,可以访问数组中的任意元素03使用指针访问数组元素比使用下标访问更加灵活,但需要注意内存地址的计算指针与字符串字符串在C语言中通常表示为字符数组,因此可以通过指针访问字符串中的字符字符串常量在内存中以字符数组的形式存储,可以通过指向字符的指针访问字符串中的字符使用指针访问字符串时,需要注意字符串的结束符0,以避免访问到非法内存地址03指针与函数指针作为函数参数010203传递地址动态内存分配高效数据交换通过指针作为函数参数,可以将通过指针作为函数参数,可以在通过指针作为函数参数,可以高变量的地址传递给函数,从而实函数中动态分配内存,并返回给效地交换大量数据,避免数据拷现函数对变量的修改调用者使用贝返回指针的函数返回数组的指针返回结构体的指针动态内存分配返回指针的函数可以用于返回数返回指针的函数可以用于返回结返回指针的函数可以用于动态分组的地址,使调用者能够访问和构体的地址,使调用者能够访问配内存,并返回指向新分配内存操作数组元素结构体的成员的指针函数指针指向函数的指针函数指针是指向函数的指针变量,可以通过函数指针来调用函数回调函数函数指针可以用于实现回调函数,即在某个特定事件发生时自动调用某个函数实现动态绑定通过函数指针和虚函数表,可以实现动态绑定,即在运行时确定要调用的函数04动态内存分配使用malloc函数分配内存参数功能size_t size表示要分配的内存大小返回值如果分配成功,返回指向新分配在堆区分配指定字节数的内存空内存的指针;如果分配失败,返间,并返回指向它的指针回NULLmalloc函数定义示例int*ptr=int*void*mallocsize_t size;mallocsizeofint;使用calloc函数分配内存callnum表示要分配的元素void*callocsize_t oc功int*ptr=int*参数量,size_t size表示函数能数num,size_t size;calloc10,sizeofint;定义每个元素的大小在堆区分配指定数量和如果分配成功,返回指返示指定大小的内存空间,向新分配内存的指针;回例并将内存初始化为0,然如果分配失败,返回值后返回指向它的指针NULL使用free函数释放内存free函数定义功能void freevoid*ptr;释放之前使用malloc或calloc等函数分配的内存空间参数注意事项void*ptr释放后的内存指针不能再使用,否则会导致未定义行为表示要释放的内存指针释放后应将指针设置为NULL,以避免悬挂指针的问题05指针与结构体结构体指针的定义与初始化结构体指针定义使用结构体指针变量来存储结构体变量的地址结构体指针初始化在定义结构体指针时,可以直接将其初始化为某个结构体变量的地址结构体指针的定义与初始化示例代码01```c02struct Student{03结构体指针的定义与初始化•char name
[20];结构体指针的定义与初始化•int age;结构体指针的定义与初始化};struct Studentstu1;struct Student*p=stu1;//定义并初始化结构体指```针通过结构体指针访问结构体成员使用箭头运算符(-)通过结示例代码```c构体指针访问结构体成员010203printf%sn,p-name;//printf%dn,p-age;//通```通过结构体指针访问name成过结构体指针访问age成员040506员结构体指针作为函数参数•将结构体指针作为函数参数,可以在函数内部通过指针访问和修改结构体的内容结构体指针作为函数参数示例代码```cvoid printStudentstructStudent*p{结构体指针作为函数参数printf%sn,p-name;printf%dn,p-age;结构体指针作为函数参数01}02printStudentstu1;//传递结构体指针作为参数03```06指向指针的指针二级指针的定义与初始化定义二级指针是指向指针的指针,可以用来表示指针的地址初始化在定义二级指针时,需要将其初始化为某个指针的地址通过二级指针修改指针的值01通过二级指针可以间接地修改指针的值02首先,将二级指针指向某个指针的地址然后,通过解引用二级指针来获取该指针03的值最后,修改该值并重新赋值给该指针04二级指针在动态内存分配中的应用010203在动态内存分配中,经使用`malloc`或`calloc`通过二级指针,可以获常需要使用二级指针来函数为动态内存分配空取该指针的地址,从而操作内存间时,返回的是一个指可以修改该指针的值来向该内存区域的指针改变动态内存区域的内容THANKS感谢观看。
个人认证
优秀文档
获得点赞 0