(中职)编程语言基础——C语言模块7教学课件.ppt
《(中职)编程语言基础——C语言模块7教学课件.ppt》由会员分享,可在线阅读,更多相关《(中职)编程语言基础——C语言模块7教学课件.ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、YCF正版可修改PPT(中职)编程语言基础C语言模块7教学课件模块模块7指针指针任务任务1 指针的概念指针的概念任务任务2 指向简单变量的指针指向简单变量的指针任务任务3 指针与数组指针与数组任务任务4 指向字符串的指针变量指向字符串的指针变量任务任务5 指向函数的指针变量指向函数的指针变量任务任务6 指针变量作为函数参数指针变量作为函数参数任务任务7 指向结构体变量的指针指向结构体变量的指针任务任务1指针的概念指针的概念程序中的变量在运行时要占用内存单元,用来存放变量的内程序中的变量在运行时要占用内存单元,用来存放变量的内容。内存单元按顺序编号,称为内存地址,它相当于门牌号,容。内存单元按顺
2、序编号,称为内存地址,它相当于门牌号,系统根据内存地址存取数据。系统根据内存地址存取数据。在在C语言中,指针是一种数据类型,指针变量是用来专门存放语言中,指针是一种数据类型,指针变量是用来专门存放所指对象地址的变量,也就是说,数据值是存放在指针所指所指对象地址的变量,也就是说,数据值是存放在指针所指的对象中,而不是在指针变量中。例如,我们定义了一个变的对象中,而不是在指针变量中。例如,我们定义了一个变量量px,把,把x的地址的地址1000存放在变量存放在变量px中,通过中,通过px可以间接可以间接地访问地访问x变量。变量。px就是指向就是指向x的指针变量,的指针变量,px和它所指对象和它所指对
3、象x的关系如的关系如图图7-1所示。所示。返回任务任务2指向简单变量的指针指向简单变量的指针7.2.1 指针变量的定义指针变量的定义指针变量在指针变量在C语言中是一个重要的概念,指针变量定义的一般语言中是一个重要的概念,指针变量定义的一般形式为形式为:其含义是其含义是:指明标识符是存放某类型变量的地址变量,又称标指明标识符是存放某类型变量的地址变量,又称标识符为指向类型标识符的指定变量,简称标识符为指向类型识符为指向类型标识符的指定变量,简称标识符为指向类型标识符的指针。标识符的指针。例如例如int*px,x;表明表明px是指向某一整型变量的指针变量。是指向某一整型变量的指针变量。指针变量是一
4、个变量,是存放地址的变量。设有一个指针变指针变量是一个变量,是存放地址的变量。设有一个指针变量量px,若把变量,若把变量x的地址赋给的地址赋给px,即,即:返回下一页任务任务2指向简单变量的指针指向简单变量的指针则变量则变量x的地址被放入指针变量的地址被放入指针变量px的存储空间中,其关系如的存储空间中,其关系如图图7-2所示。所示。当指针得到某一地址时,称该指针指向了那个地址的存储空间当指针得到某一地址时,称该指针指向了那个地址的存储空间;指针指向的存储区域中的数据称为指针的目标。指针指向的存储区域中的数据称为指针的目标。在程序中用在程序中用“*”表示指针的目标,即表示指针的目标,即:*px
5、表示的是表示的是px的目标的目标x。其实其实*px是一个运算表达式,也就是说是一个运算表达式,也就是说:“*”是一个运算符,称是一个运算符,称为访问目标运算符,它只有一个运算量,而且必须是地址量。为访问目标运算符,它只有一个运算量,而且必须是地址量。在对指针的实际运用中,经常会用到以下操作。在对指针的实际运用中,经常会用到以下操作。对指针变量赋地址,即指针的初始化对指针变量赋地址,即指针的初始化;利用指针可以间接访问变量。利用指针可以间接访问变量。上一页返回下一页任务任务2指向简单变量的指针指向简单变量的指针【例例7-1】使用指针实现对变量的间接访问。使用指针实现对变量的间接访问。上一页返回下
6、一页任务任务2指向简单变量的指针指向简单变量的指针7.2.2 指针的用途和用法指针的用途和用法由于指针是一种存放变量地址的特殊变量,因而为指针初始由于指针是一种存放变量地址的特殊变量,因而为指针初始化的方法就是将化的方法就是将1个变量的地址赋给个变量的地址赋给1个指针变量。个指针变量。(1)取地址运算符取地址运算符”&”。在。在C程序设计中,程序设计中,1个变量在内存中个变量在内存中存放时具有确定的地址,但是对于程序设计者来说,具体地存放时具有确定的地址,但是对于程序设计者来说,具体地址是多少并不重要。使用取地址运算符址是多少并不重要。使用取地址运算符”&”可以获得可以获得1个变个变量在内存中
7、的地址。量在内存中的地址。上一页返回下一页任务任务2指向简单变量的指针指向简单变量的指针(2)将变量地址赋给指针。程序中的语句组将变量地址赋给指针。程序中的语句组”p=&a;q=&b;”的功能是把整型变量的功能是把整型变量a、b的地址赋给指针的地址赋给指针变量变量p、q,这就是对指针变量的赋值操作。,这就是对指针变量的赋值操作。注意注意:对指针变量所赋的值一定是地址值。我们可以使用对指针变量所赋的值一定是地址值。我们可以使用3种种地址值地址值:变量的地址变量的地址:其表示方法为其表示方法为&变量名,如程序中变量名,如程序中&a和和&b数组名数组名:数组名表示数组的首地址。数组名表示数组的首地址
8、。已经定向的指针已经定向的指针:其中保存了其中保存了1个变量的地址。个变量的地址。上一页返回下一页任务任务2指向简单变量的指针指向简单变量的指针(3)取内容运算符取内容运算符“*”。在指针的前面添加。在指针的前面添加“*”运算符可运算符可以获得该指针所指向变量的值,因此将以获得该指针所指向变量的值,因此将“*”运算符称为取内运算符称为取内容运算符。容运算符。当将一个指针指向一个变量后,使用当将一个指针指向一个变量后,使用“*”可以实现对变量的可以实现对变量的间接访问。举例说明。间接访问。举例说明。上一页返回下一页任务任务2指向简单变量的指针指向简单变量的指针使用间接访问的方法不但可以将数据读出
9、,还可以将数据写使用间接访问的方法不但可以将数据读出,还可以将数据写入。入。注意注意:在指针定义语句中在指针定义语句中“*”只是一个指针标志符号,主要只是一个指针标志符号,主要说明定义的变量为指针变量,不是取内容的运算符号,举例说明定义的变量为指针变量,不是取内容的运算符号,举例对比。对比。上一页返回下一页任务任务2指向简单变量的指针指向简单变量的指针正因为如此,可以在指针定义的同时对其进行定向,例如正因为如此,可以在指针定义的同时对其进行定向,例如:(4)除了给指针赋除了给指针赋1个确定的地址外还可以为指针赋个确定的地址外还可以为指针赋1个空值,个空值,这时该指针并没有指向个确定的地址,例如
10、这时该指针并没有指向个确定的地址,例如:上一页返回下一页任务任务2指向简单变量的指针指向简单变量的指针(5)在在C语言中,虽然在定义语言中,虽然在定义1个变量后系统就为该变量在内个变量后系统就为该变量在内存中分配了一定大小的存储空间。但究竟此单元的地址是多存中分配了一定大小的存储空间。但究竟此单元的地址是多少,用户是很难知道的。其实,在实际的操作中,通常并不少,用户是很难知道的。其实,在实际的操作中,通常并不需要知道需要知道1个变量在内存中的地址编号是多少,在程序中只需个变量在内存中的地址编号是多少,在程序中只需用相应的表达式表示出用相应的表达式表示出1个变量的地址即可,例如使用语句个变量的地
11、址即可,例如使用语句:上一页返回任务任务3指针与数组指针与数组7.3.1 一维数组的指针和指向一维数组的一维数组的指针和指向一维数组的指针变量指针变量1.数组的指针与数组元素的指针数组的指针与数组元素的指针数组元素的指针是指数组中某个具体元素的地址。数组的指针数组元素的指针是指数组中某个具体元素的地址。数组的指针则是数组的首地址,也叫起始地址,是数组中最开头那个元素则是数组的首地址,也叫起始地址,是数组中最开头那个元素的地址。的地址。C语言程序中,数组名本身就代表该数组的首地址。语言程序中,数组名本身就代表该数组的首地址。返回下一页任务任务3指针与数组指针与数组2.指向数组元素的指针变量的定义
12、与赋值指向数组元素的指针变量的定义与赋值定义一个指向数组元素的指针变量的方法一般如下定义一个指向数组元素的指针变量的方法一般如下:注意注意:必须保证数组类型和指针变量所指向的变量类型保持一致。必须保证数组类型和指针变量所指向的变量类型保持一致。如果数组为如果数组为int型,则指针变量应指向型,则指针变量应指向int型型;如果数组为如果数组为float型,则指针变量应指向型,则指针变量应指向float型。型。对指向数组的指针变量赋值有两种方法对指向数组的指针变量赋值有两种方法:将数组的地址赋给指将数组的地址赋给指针变量和将数组元素的地址赋给指针变量。针变量和将数组元素的地址赋给指针变量。上一页返
13、回下一页任务任务3指针与数组指针与数组3.指针法引用数组元素指针法引用数组元素假定假定:那么那么a代表数组代表数组a的首地址的首地址&a0,p的值也是的值也是&a0,*p和和*a则表示则表示a0。a+1的值是的值是&a1,p+1的值也是的值也是&a1,*(a+1)和和*(p+1)则表示则表示 a1 a+i的值是的值是&ai,p+i的值也是的值也是&ai,*(a+i)和和*(p+i)则表示则表示ai上一页返回下一页任务任务3指针与数组指针与数组上述文字可用上述文字可用图图7-3来形象地表示。来形象地表示。数组中元素数组中元素ai的实际地址为的实际地址为:a+i*d,d为一个数组元素为一个数组元素
14、所占的字节数。例如所占的字节数。例如:如果如果a=2001;则元素则元素a5的实际地的实际地址为址为2001+5*2,即,即2011。因为一个。因为一个int型数据占型数据占2个个字节。字节。P是指针变量,可以进行递增和递减运算,例如是指针变量,可以进行递增和递减运算,例如:p+;p-;是合法的,但;是合法的,但a不能进行递增和递减运算,例如不能进行递增和递减运算,例如:a+:a-是非法的。因为是非法的。因为a是数组名,代表首地址,在程序是数组名,代表首地址,在程序中是固定不变的,不能进行递增和递减运算。中是固定不变的,不能进行递增和递减运算。上一页返回下一页任务任务3指针与数组指针与数组例例
15、7-3用指针法输入输出数组元素的值。用指针法输入输出数组元素的值。上一页返回下一页任务任务3指针与数组指针与数组例例7-3的程序可以写成下面的指针法形式,其结果仍然不变。的程序可以写成下面的指针法形式,其结果仍然不变。程序如下程序如下:上一页返回下一页任务任务3指针与数组指针与数组例例7-3的程序还可以写成下面的指针法形式,其结果也是不的程序还可以写成下面的指针法形式,其结果也是不变的。变的。上一页返回下一页任务任务3指针与数组指针与数组7.3.2 内存的动态分配内存的动态分配在在C语言程序中,当定义任何一个类型数据对象时,程序都会语言程序中,当定义任何一个类型数据对象时,程序都会自动分配足够
16、的内存空间来存储这些数据,特别在处理较多自动分配足够的内存空间来存储这些数据,特别在处理较多的数据时,通常使用数组。数组具有静态性,必须在程序编的数据时,通常使用数组。数组具有静态性,必须在程序编译前确定数组的大小,不能在程序运行时根据数据的实际多译前确定数组的大小,不能在程序运行时根据数据的实际多少来确定数组的大小,那样往往造成内存资源的浪费,降低少来确定数组的大小,那样往往造成内存资源的浪费,降低程序效率。程序效率。对数据使用动态存储的一般步骤如下对数据使用动态存储的一般步骤如下:确定需要多少内存空间一分配需要的存储空间一使指针指向确定需要多少内存空间一分配需要的存储空间一使指针指向获得的
17、内存空间一用完后释放掉这部分内存空间。获得的内存空间一用完后释放掉这部分内存空间。上一页返回下一页任务任务3指针与数组指针与数组1.malloc()函数函数作用作用:从堆中申请分配一个大小为从堆中申请分配一个大小为size字节的内存块,函数使字节的内存块,函数使用完毕后,返回一个指针值,它指向新分配的内存块。如果用完毕后,返回一个指针值,它指向新分配的内存块。如果堆不够分配,则返回的指针值为堆不够分配,则返回的指针值为NULL。使用使用malloc()函数,必须将其头文件函数,必须将其头文件”stdlib.h”包含进来。包含进来。在计算内存空间大小时,通常使用在计算内存空间大小时,通常使用si
18、zeof运算符来计算单个运算符来计算单个数据所需的字节数。数据所需的字节数。上一页返回下一页任务任务3指针与数组指针与数组上一页返回下一页任务任务3指针与数组指针与数组上一页返回下一页任务任务3指针与数组指针与数组2.calloc()函数函数作用作用:从堆中申请分配从堆中申请分配n个大小为个大小为size字节的连续内存块,函字节的连续内存块,函数使用完毕后,返回一个指针值,它指向新分配的首个内存数使用完毕后,返回一个指针值,它指向新分配的首个内存块。如果堆不够分配,则返回的指针值为块。如果堆不够分配,则返回的指针值为NULL。使用。使用calloc()函数,必须将其头文件函数,必须将其头文件”
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 语言 基础 模块 教学 课件
限制150内