指针与动态内存分配.ppt
《指针与动态内存分配.ppt》由会员分享,可在线阅读,更多相关《指针与动态内存分配.ppt(23页珍藏版)》请在三一文库上搜索。
1、指针与动态内存分配,课程内容安排,指针概述 指针的运算 指针与数组 指针与函数 指针与字符串 二级指针 动态内存分配 小结 习题,1 指针概述,1.内存单元:在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等。 为了正确地访问内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。 简单来说,指针是一个地址,其指向存储某一个数据的存储地址。 指针变量是一种特殊性质的变量。指针变量是存放另一个变量的地址的变量。它和普通变量一样占用一
2、定的存储空间。它与普通变量不同之处:指针的存储空间里存放的不是普通的数据,而是一个地址。 对于指针我们可以这样理解,比如一个人要到某地去,但不认识路,于是去问交警。然后交警把该地方的地址写在了一张纸上,并且给了该问路人。那么交警写的地址就是指针,指向要去的地址,而那张纸就是指针变量,用于存储指针。,2 定义指针,指针是一个变量,在程序中使用时,必须先声明,后使用。在指针声明的同时也可以进行初始化。指针的定义指出了指针的存储类型和数据类型,定义的语法形式如下: 存储类型名 数据类型 *指针变量名 例如: int *px; char *name; static int *pa; 定义了一个指针后,
3、在使用此指针前,必须首先给它赋一个合法的值。否则,程序中对指针的使用就有可能导致系统崩溃。可以在定义指针的同时通过初始化来给指针赋值,也可以在使用之前给指针赋值。指针初始化的一般形式如下: 存储类型 数据类型 *指针名=初始地址值;,3 指针的运算,两个有关的运算符: (1)&:取地址运算符 (2)*:指针运算符(或称“间接访问”运算符) 例如,&为变量的地址,*为指针变量所指向的变量 使用*p与定义*p不同,定义时,int *p中的“*”不是运算符,而在程序执行语句中,引用“*p”,其中的“*”是一个指针运算符 指针运算是以指针变量所持有的地址值为运算量进行的运算。因此,指针运算的实质是地址
4、的计算。由于指针是持有地址量的变量这一特性,指针的运算与普通变量的运算在种类上和意义上都是不同的。指针运算的种类是有限的,它只能进行取地址和取值运算、算术运算、关系运算和赋值运算。 如果说明了一个指针,并使其值为某个变量的地址,则可以通过这个指针间接地访问在这个地址中存储的值。,4 常指针与指针常量,修饰词 const const是C语言的一种关键字,起受保护,防止以外的变动的作用!可以修饰变量,参数,返回值,甚至函数体。 const 修饰变量,表示该变量不能被修改。 1、const char *p 表示 指向的内容不能改变,叫常量指针。 2、char * const p,就是将p声明为指针常
5、量,它的地址不能改变,是固定的,但是它的内容可以改变。 3、若const指针是前两种的结合,使得指向的内容和地址都不能发生变化. const double pi = 3.14159; const double *const pi_ptr = 教材54到55页,5 多级指针,当指针变量pp所指的变量ip又是一个指针时,pp是一种指向指针的指针,此时称指针变量pp是一种多级指针。定义指向指针变量的指针变量的一般形式为: 类型说明符 * 变量名; 该一般形式说明以下几个方面的内容:首先定义变量为指针变量,其次是该变量能指向一种指针对象,最后是被指向的指针对象能指向的对象的类型。 例如 int *pp
6、, *ip, i; ip = 定义说明pp是指向指针的指针变量;它能指向的是这样一种指针对象,该指针对象是能指向int型的指针变量。如上述代码让pp指向指针变量ip,ip指向整型变量i。,6 指针的算术运算,指针的算术运算是按C语言地址计算规则进行的,这种运算与指针指向的数据类型有密切关系,也就是C语言的地址计算与地址中存放的数据长度有关。设px和py是指向具有相同数据类型的一组若干数据的指针,n是整数,则指针可以进行的算术运算有如下几种: px+n,pxn,px+,+px, px,px,pxpy,指针与整数运算 指针作为地址量加上或减去一个整数n,其意义是指针当前指向位置的前方或后方第n个数
7、据的位置。由于指针可以指向不同数据类型,即数据长度不同的数据,所以这种运算的结果值取决于指针指向的数据类型。例如,假设有一单字节字符类型和另一个双字节整数类型:当字符指针加1时,增量为1,而整数指针加1时,增量为2。 指针相减: 设指针p和q是指向同一组数据类型一致的数据,则pq运算的结果值是两指针指向的地址位置之间的数据个数。,两个指向同一组类型相同的数据的指针之间可以进行各种关系运算,运算结果为逻辑值,满足关系时,结果为(真),否则为(假)。 如int a10,*p,*q; p= 则p&a2 结果为0 指向不同数据类型的指针之间的关系运算是没有意义的。 指针与一般整数变量之间的关系运算也是
8、无意义的。 但是指针可以和零之间进行等于或不等于的关系运算,即:p= =0或p!=0,它们用于判断指针p是否为一个空指针。,7 指针与数组,指针在数组中使用较为频繁,事实上,数组名就是一个地址,表示的是该数组的首地址 。 要访问或使用一个数组元素,可以用三种不同的方法:下标法、地址法,还有一种是指针法。 可以设置指针变量指向数组或数组中的元素。 如:int a10, *p; 可以使整型指针p指向数组中任何一个元素, 假定给出赋值运算 p= 此时, p指向数组中的第0号元素, 即a0, 指针变量p中包含了数组元素a0 的地址, 由于数组元素在内存中是连续存放的, 因此, 我们就可以通过指针变量p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 动态 内存 分配
链接地址:https://www.31doc.com/p-2717273.html