(6.16)--补充课件第10讲-指针程序设计基础.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《(6.16)--补充课件第10讲-指针程序设计基础.ppt》由会员分享,可在线阅读,更多相关《(6.16)--补充课件第10讲-指针程序设计基础.ppt(145页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十讲指针第十讲指针C语言程序设计语言程序设计 The C Programming Language2C语言程序设计语言程序设计 温州理工学院温州理工学院 2指指 针针本章要求本章要求理解指针的概念;理解指针的概念;掌握指针变量的定义和使用方法;掌握指针变量的定义和使用方法;掌握指针变量作函数参数时,数据的传递方式;掌握指针变量作函数参数时,数据的传递方式;掌握使用指针处理一维、二维数组的方法;掌握使用指针处理一维、二维数组的方法;掌握使用指针处理字符串的方法。掌握使用指针处理字符串的方法。本章重点本章重点指针变量的定义和使用指针变量的定义和使用指针变量作函数参数指针变量作函数参数使用指针处理
2、一维数组和字符串使用指针处理一维数组和字符串本章难点本章难点使用指针处理一维、二维数组使用指针处理一维、二维数组3C语言程序设计语言程序设计 温州理工学院温州理工学院 3指指 针针地址与指针概述地址与指针概述变量的指针与指向变量的指针变量变量的指针与指向变量的指针变量指针运算符与指针变量运算指针运算符与指针变量运算数组与指针数组与指针字符串与指针字符串与指针指向函数的指针指向函数的指针返回指针值的函数返回指针值的函数指针数组与指向指针的指针指针数组与指向指针的指针本章小结本章小结参考书目及网络资源参考书目及网络资源讨论时间讨论时间4C语言程序设计语言程序设计 温州理工学院温州理工学院 4指指
3、针针地址与指针概述地址与指针概述变量的指针与指向变量的指针变量变量的指针与指向变量的指针变量指针运算符与指针变量运算指针运算符与指针变量运算数组与指针数组与指针字符串与指针字符串与指针指向函数的指针指向函数的指针返回指针值的函数返回指针值的函数指针数组与指向指针的指针指针数组与指向指针的指针本章小结本章小结参考书目及网络资源参考书目及网络资源讨论时间讨论时间5C语言程序设计语言程序设计 温州理工学院温州理工学院 5地址与指针概述地址与指针概述C语言的数据是以数据类型形式出现的,语言的数据是以数据类型形式出现的,C的的数据类型如下:数据类型如下:6C语言程序设计语言程序设计 温州理工学院温州理工
4、学院 6地址与指针概述地址与指针概述指针是指针是C C语言中广泛使用的一种数据类型。运语言中广泛使用的一种数据类型。运用指针编程是用指针编程是C C语言最主要的风格之一。语言最主要的风格之一。利用指针变量可以表示各种数据结构;利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。而高效的程序。7C语言程序设计语言程序设计 温州理工学院温州理工学院 7地址与指针概述地址与指针概述(contd)地址的概念地址的概念 程序是由程序是由CPU控制和运行的,在执行过程
5、中需要处控制和运行的,在执行过程中需要处理各种数据,这些数据被存放在内存中。理各种数据,这些数据被存放在内存中。为了便于管理,内存空间被划分成若干个大小相同为了便于管理,内存空间被划分成若干个大小相同(1个字节)的存储单元,里面存放着各种数据。个字节)的存储单元,里面存放着各种数据。内存中每一个存储单元也有一个编号,这个编号被内存中每一个存储单元也有一个编号,这个编号被称为称为地址地址。通过地址就可以十分方便地访问指定的。通过地址就可以十分方便地访问指定的存储单元。存储单元。如果在程序中定义了一个变量,在对程序进行编译如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单
6、元。变量的地时,系统就会给这个变量分配内存单元。变量的地址是存储它的第址是存储它的第1个单元的编号。个单元的编号。8C语言程序设计语言程序设计 温州理工学院温州理工学院 8地址与指针概述地址与指针概述(contd)地地 址址 2001 20022003 3000 内存单元的内容内存单元的内容00100011 000111011100110000110011 CPUBUS9C语言程序设计语言程序设计 温州理工学院温州理工学院 9指针指针指针指针严格地说,一个指针是一个地址,是一个严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的常量。而一个指针变量却可以被赋予不同的指针值
7、,是变量。但常把指针变量简称为指指针值,是变量。但常把指针变量简称为指针。针。为了避免混淆,我们中约定:为了避免混淆,我们中约定:“指针指针”是是指地址,是指地址,是常量常量,“指针变量指针变量”是指取值为是指取值为地址的地址的变量变量。定义指针的目的是为了通过指针去访问内定义指针的目的是为了通过指针去访问内存单元。存单元。10C语言程序设计语言程序设计 温州理工学院温州理工学院 10变量的存储与访问变量的存储与访问直接访问直接访问即系统直接根据变量的地址找到相应的存储空即系统直接根据变量的地址找到相应的存储空间。间。间接访问间接访问基本思想:基本思想:将要访问变量将要访问变量a的地址存放在另
8、一个变量的地址存放在另一个变量p中中当需要访问变量当需要访问变量a时,先取出变量时,先取出变量p的内容即变量的内容即变量a的地址的地址再根据此地址找到变量再根据此地址找到变量a所对应的存储空间。所对应的存储空间。能够存放其它变量地址的变量称作能够存放其它变量地址的变量称作指针变量指针变量。11C语言程序设计语言程序设计 温州理工学院温州理工学院 11直接访问直接访问按变量地址存取变量值。按变量地址存取变量值。假设程序已定义三个整型假设程序已定义三个整型变量变量i、j、k,它们分别占,它们分别占用两个字节。用两个字节。在程序中一般是通过变量在程序中一般是通过变量名来对内存单元进行存取名来对内存单
9、元进行存取操作的。事实上,编译后操作的。事实上,编译后已经将变量名转换为变量已经将变量名转换为变量的地址,对变量的存取都的地址,对变量的存取都是通过地址进行的。是通过地址进行的。变量名与地址之间的对应变量名与地址之间的对应关系在编译时确定的。关系在编译时确定的。int i,j,k;scanf(“%d”,&i);printf(“%d”,i);k=i+j12C语言程序设计语言程序设计 温州理工学院温州理工学院 12间接访问间接访问假设程序已定义了一个变量假设程序已定义了一个变量i_pointer,用来存放整型变量,用来存放整型变量的地址,它被分配为的地址,它被分配为3010、3011两个字节。两个
10、字节。语句语句i_pointer=&i;将将i的地址的地址(2000)存放到)存放到i_pointer中。中。i_pointer的值就是的值就是2000,即变,即变量量i所占用单元的起始地址。所占用单元的起始地址。存取变量存取变量i的值,先找到存放的值,先找到存放“i的地址的地址”的变量的变量i_pointer,从中取出,从中取出i的地址(的地址(2000),),然后到然后到2000、2001字节取出字节取出i的值(的值(3)。)。int i,*i_pointer;i_pointer=&i;13C语言程序设计语言程序设计 温州理工学院温州理工学院 13地址与指针概述地址与指针概述(contd)
11、图图(a)表示表示直接访问直接访问,根据变量,根据变量i的地址直接对变量的地址直接对变量i的存储的存储单元进行存取访问单元进行存取访问。图。图(b)则表示则表示间接访问间接访问,先找到存放,先找到存放变量变量i地址的变量地址的变量i_pointer,从其中得到变量,从其中得到变量i的地址,然的地址,然后找到变量后找到变量i的存储单元,对它进行存取访问。的存储单元,对它进行存取访问。14C语言程序设计语言程序设计 温州理工学院温州理工学院 14指针、指针变量指针、指针变量&指针变量的值指针变量的值一个一个变量的地址变量的地址称为该变称为该变量的量的“指针指针”。例如,地。例如,地址址2000是变
12、量是变量i的指针。的指针。如果有一个变量专门用来如果有一个变量专门用来存放另一存放另一变量的地址变量的地址(即(即指针),则它称为指针),则它称为“指针指针变量变量”。如。如i_pointer就是就是一个指针变量。一个指针变量。指针变量的值(即指针变指针变量的值(即指针变量中存放的值)是量中存放的值)是地址地址(即指针)(即指针)。15C语言程序设计语言程序设计 温州理工学院温州理工学院 15为什么要为指针变量定义类型为什么要为指针变量定义类型?既然指针变量的值是一个地址,那么这个地址不仅既然指针变量的值是一个地址,那么这个地址不仅可以是变量的地址,也可以是其它数据结构的地址。可以是变量的地址
13、,也可以是其它数据结构的地址。在一个指针变量中存放一个数组或一个函数的首地在一个指针变量中存放一个数组或一个函数的首地址有何意义呢?址有何意义呢?因为数组或函数都是连续存放的。通过访问指因为数组或函数都是连续存放的。通过访问指针变量取得了数组或函数的首地址,也就找到了针变量取得了数组或函数的首地址,也就找到了该数组或函数。这样一来,凡是出现数组,函数该数组或函数。这样一来,凡是出现数组,函数的地方都可以用一个指针变量来表示,只要该指的地方都可以用一个指针变量来表示,只要该指针变量中赋予数组或函数的首地址即可。针变量中赋予数组或函数的首地址即可。16C语言程序设计语言程序设计 温州理工学院温州理
14、工学院 16为什么要为指针变量定义类型为什么要为指针变量定义类型?在在C语言中,一种数据类型或数据结构往往都语言中,一种数据类型或数据结构往往都占有一组连续的内存单元。占有一组连续的内存单元。用用“地址地址”这个概念并不能很好地描述一这个概念并不能很好地描述一种数据类型或数据结构,种数据类型或数据结构,而而“指针指针”虽然实际上也是一个地址,但虽然实际上也是一个地址,但它却是一个数据结构的首地址,它是它却是一个数据结构的首地址,它是“指向指向”一个数据结构的,因而概念更为清楚,表一个数据结构的,因而概念更为清楚,表示更为明确。示更为明确。这也是引入这也是引入“指针指针”概念的概念的一个重要原因
15、。一个重要原因。17C语言程序设计语言程序设计 温州理工学院温州理工学院 17指指 针针地址与指针概述地址与指针概述变量的指针与指向变量的指针变量变量的指针与指向变量的指针变量指针运算符与指针变量运算指针运算符与指针变量运算数组与指针数组与指针字符串与指针字符串与指针指向函数的指针指向函数的指针返回指针值的函数返回指针值的函数指针数组与指向指针的指针指针数组与指向指针的指针本章小结本章小结参考书目及网络资源参考书目及网络资源讨论时间讨论时间18C语言程序设计语言程序设计 温州理工学院温州理工学院 18变量的指针和指向变量的指针变量变量的指针和指向变量的指针变量变量的指针变量的指针就是变量的地址
16、。存放变量地址的就是变量的地址。存放变量地址的变量是指针变量。即在变量是指针变量。即在C语言中,允许用一个语言中,允许用一个变量来存放指针,这种变量称为变量来存放指针,这种变量称为指针变量指针变量。一个一个指针变量的值指针变量的值就是某个变量的地址或称为就是某个变量的地址或称为某变量的指针。某变量的指针。为了表示指针变量和它所指向的变量之间的关为了表示指针变量和它所指向的变量之间的关系,在程序中用系,在程序中用“*”符号表示符号表示“指向指向”。19C语言程序设计语言程序设计 温州理工学院温州理工学院 19变量的指针和指向变量的指针变量变量的指针和指向变量的指针变量为了表示指针变量和它所指向的
17、变量之间的关为了表示指针变量和它所指向的变量之间的关系,在程序中用系,在程序中用“*”符号表示符号表示“指向指向”。例如,例如,i_pointer 代表指针变量,而代表指针变量,而*i_pointer 是是i_pointer 所指向的变量。因此,下面两个语句作用所指向的变量。因此,下面两个语句作用相同:相同:i=3;*i_pointer=3;/*将将3 赋给指针变量赋给指针变量i_pointer所指向所指向的变量。的变量。*/20C语言程序设计语言程序设计 温州理工学院温州理工学院 20指针变量的定义指针变量的定义格式格式:基类型基类型*指针变量名指针变量名 指针变量的命名规则与普通变量的命名
18、规则指针变量的命名规则与普通变量的命名规则相同。相同。*表示所定义变量的类型为指针型。表示所定义变量的类型为指针型。例例如如,int a;定定义义了了一一个个整整型型变变量量a,而而int*p;定定义了一个指向整型变量的指针型变量义了一个指向整型变量的指针型变量p。基类型为基类型为C语言的各种类型符。语言的各种类型符。如如int、float、char等。其含义为该指针变量中等。其含义为该指针变量中存放的是什么类型变量的地址。存放的是什么类型变量的地址。21C语言程序设计语言程序设计 温州理工学院温州理工学院 21指针变量的定义指针变量的定义下面都是合法的定义:下面都是合法的定义:float *
19、pointer_3;/pointer_3是是指向指向float型变量的指针变量型变量的指针变量char*pointer_4;/pointer_4是是指向字符型变量的指针变量指向字符型变量的指针变量可以用赋值语句使一个指针变可以用赋值语句使一个指针变量得到另一个变量的地址,从量得到另一个变量的地址,从而使它指向一个该变量。如:而使它指向一个该变量。如:pointer_1=&i;pointer_2=&j;22C语言程序设计语言程序设计 温州理工学院温州理工学院 22指针变量的定义指针变量的定义指针变量前面的指针变量前面的“*”,表示该变量的类型为指针,表示该变量的类型为指针型变量。型变量。例例:f
20、loat *pointer_1;指针变量名是指针变量名是pointer_1,而不是,而不是*pointer_1。在定义指针变量时必须指定基类型。在定义指针变量时必须指定基类型。指针变量的类型必须与所指向变量的地址的变量指针变量的类型必须与所指向变量的地址的变量基类型一致。下面的赋值是错误的:基类型一致。下面的赋值是错误的:float a;int *pointer_1;pointer_1=&a;/错误。不能将错误。不能将float型变量的地址放到型变量的地址放到指向整型变量的指针变量中指向整型变量的指针变量中23C语言程序设计语言程序设计 温州理工学院温州理工学院 23指针变量的引用指针变量的引
21、用指针变量的引用指针变量的引用指针变量同普通变量一样,使用之前不仅要定义说指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。乱,甚至死机。指针变量的赋值只能赋予地址,指针变量的赋值只能赋予地址,决不能赋予任何决不能赋予任何其它数据,否则将引起错误。其它数据,否则将引起错误。在在C语言中,变量的地址是由编译系统分配的,对语言中,变量的地址是由编译系统分配的,对用户完全透明,用户不知道变量的具体地址。用户完全透明,用户不知道变量的具体地址。24C语言程
22、序设计语言程序设计 温州理工学院温州理工学院 24两个有关的运算符两个有关的运算符&和和*&:取地址运算符。:取地址运算符。*:指针运算符(或称:指针运算符(或称“间接访问间接访问”运算符)运算符)int a,*p1;/*定义一个整型变量定义一个整型变量a和一个指向和一个指向整型变量的指针变量整型变量的指针变量p1*/float b,*p2;/*定义一个单精度型变量定义一个单精度型变量b和一个和一个指向单精度型变量的指针变量指向单精度型变量的指针变量p2*/p1=&a;/*使使p1指向指向a,不能试图通过,不能试图通过p1=&b;使使p1指向指向b*/p2=&b;/*使使p2指向指向b,不能试
23、图通过,不能试图通过p2=&a;使使p2指向指向a*/25C语言程序设计语言程序设计 温州理工学院温州理工学院 25指针变量的访问指针变量的访问指针变量指向另一个变量指针变量指向另一个变量所谓将指针变量指向另一个变量,就是将另一个变量所谓将指针变量指向另一个变量,就是将另一个变量的地址赋值给指针变量。的地址赋值给指针变量。只能将数据类型与指针变量基类型相同的变量的地址只能将数据类型与指针变量基类型相同的变量的地址赋值给指针变量。赋值给指针变量。使用地址运算符使用地址运算符&可以获得指定变量的地址。可以获得指定变量的地址。引用指针变量引用指针变量 通通过过使使用用指指针针运运算算符符*(或或称称
24、间间接接访访问问运运算算符符)可可以以间间接访问指针变量所指向的变量接访问指针变量所指向的变量 格式格式:*指针变量指针变量26C语言程序设计语言程序设计 温州理工学院温州理工学院 26通过指针变量间接访问另一个变量通过指针变量间接访问另一个变量#include main()int a=5,b=8,*p1,*p2;p1=&a;p2=&b;printf(a=%d,b=%dn,*p1,*p2);*p1=*p1+*p2;/*相当于相当于a=a+b;*/printf(a+b=%dn,*p1);/*printf(a+b=%dn,a);*/27C语言程序设计语言程序设计 温州理工学院温州理工学院 27通过
25、指针变量访问整型变量通过指针变量访问整型变量#include main()int a,b;int*pointer_1,*pointer_2;a=100;b=10;pointer_1=&a;/*把变量把变量a的地址赋给的地址赋给pointer_1*/pointer_2=&b;/*把变量把变量b的地址赋给的地址赋给pointer_2*/printf(%d,%dn,a,b);printf(%d,%dn,*pointer_1,*pointer_2);return 0;28C语言程序设计语言程序设计 温州理工学院温州理工学院 28“&”和和“*”运算符使用说明运算符使用说明如果已执行了语句如果已执行了语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 6.16 补充 课件 10 指针 程序设计 基础
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内