了解指针与指针变量的概念.ppt
《了解指针与指针变量的概念.ppt》由会员分享,可在线阅读,更多相关《了解指针与指针变量的概念.ppt(65页珍藏版)》请在三一办公上搜索。
1、1,1.了解指针与指针变量的概念,指针与地址运算符,指针与数组。2.掌握一维数组的定义、初始化和访问,了解多维数组的定义、初始化和访问。3.了解结构体和共用体的定义和访问。,第五章 指针、数组、结构体和共用体,2,第5章 内容,5.1 指针类型5.2 数组 5.3 结构体和共用体,3,1)地址的引入2)指针变量的定义3)指针变量的运算4)const 对指针变量的约束,5.1 指针类型,4,1)地址的引入,计算机内存由若干存储单元构成,每个存储单元有一个编号;存储单元的编号,称为相应数据的指针(地址)。在一个程序中,内存分配的顺序 是从后向前,从右向左。例如,对:int i;/(先声明,放在高位
2、)double j;/(后声明,放在低位)则在内存中的存储为:,5.1 指针类型,复习:变量:是机器一个内存位置的符号名 在该内存位置可以保存数据,并可通过符号名进行访问。&:取地址运算符,&a为变量a的地址。*:指针运算符,,int a=3;,5,2)指针变量的定义,用于存储其他变量的地址的变量,为指针变量。定义方法:数据类型*指针名;如:int i;int*pi=/定义指针变量pi,并取i的地址赋给pi 即指针变量其名为pi,其值为&i注意 使用变量名不带*号,指针名带*表示取值。指针的数据类型与所指的数据类型相同;指针可以动态的,(可在指向一个变量后,再指向其他变量)。,5.1 指针类型
3、,6,2)指针变量的定义与使用 int a=2,b=3;int*pa,*pb;pa=/OK*pa=*pb/ok,将b 地址中的值,赋给 a地址指向的空间 pa=pb;/指针变量可用另一个指针变量赋值,7,/源程序:2_2.cpp#include int main()int a=2,b=3;int*pa,*pb;pa=,5.1 指针类型,8,/问题:指针的引用/源程序:5_3.cpp/#include int main()int a=2,b=3;int*pa,*pb;pa=,指针变量可用另一个指针变量赋值。pa=pb;,9,/问题:指针变量的应用/源程序:5_4.cpp#include int
4、main()int a=2,b=3;int*pa,*pb,*max;pa=,10,3)指针变量的运算 指针变量的运算包括:(1)单指针变量的运算(2)指针间的减法(3)指针间的比较,5.1 指针类型,11,(1)单指针变量的运算。指针使用前,必须检查其是否为空 如对 int*p;用if(p=NULL)来判断是否为空。指针变量的单目运算 p+n 表示找到与当前指针偏移n个内存地址偏移量的位置。(p本身的值保持不变)示例1:int a,b,c;int*pc=则 pc+1/找到位置&b pc+2/找到位置&a,5.1 指针类型,12,/问题:单指针运算/源程序:5_5.cpp#include int
5、 main()int a1=1,a2=2,a3=3,a4=4;int*pi=,5.1 指针类型,13,(2)指针间的减法 int a=1,b=2,c=3,d=4;int*pa=pa-pb 结果是3 单位为int的长度,即地址相差34=12字节。注意的是两指针的相加、乘、除以,一般是无意义。,5.1 指针类型,14,(3)指针间的比较 一般地 对变量:先声明的变量,比后声明的变量,地址值大;指针的关系运算 同类型的指针,可进行关系运算 可用关系运算符号!=、=、=、,5.1 指针类型,15,(3)指针间的比较/示例 5-7#include int main()int a=1,b=2,c=3;in
6、t*pa=,5.1 指针类型,16,总结对变量 int a=3;int/通过指针,5.1 指针类型,17,4.2.4 指针参数,函数定义中,形参定义成指针类型变量;指针参数的函数调用 将实参地址赋给形参。与引用传递一样,函数执行中,会将形参和实参一同修改.示例 int add(int*x,int*y)/函数声明 add(/错误,常量不能找到地址,传不过去,4.2 函数参数的传递,18,/问题:测试指针参数/源程序4_8.cpp#include void swap(int*,int*);int main()int m=10,n=20;coutm=mtn=nendl;swap(,19,4.4 函数
7、的指针,1)函数的地址2)函数的指针,20,4.4函数指针,1)函数的地址函数被编译成二进制码存入内存,存储函数的空间的首地址,称为函数地址.函数地址,是执行函数的入口.三种形式来调用函数:max(a,b);/函数名调用(/间接地址调用,21,/问题:函数地址的测试/源程序4_12.cpp#include int max(int x,int y);int main(int argc,char*argv)int x=0,y=0,z=0;x=max(5,3);/函数名调用y=(,22,2)函数的指针指针,用语存储其他数据的地址.利用指针,可操作地址;函数指针和数据指针一样,要先定义后使用。示例 定
8、义一个char(int)类型的函数指针tr,就可以这样表示:char(*tr)(int);(*tr)的括号在这里不能省,因为在这里只是定义一个函数指针,不是声明一个函数。,4.4函数指针,23,/问题:函数指针的使用/源程序4_13.cpp#include double squarePerimeter(double);/正方形的周长double squareArea(double);/正方形的面积double cubeArea(double);/立方体的面积double cubeVolume(double);/立方体的体积,24,int main(int argc,char*argv)doub
9、le(*fp)(double);/定义函数指针double sL=5;/初始化边长double sP,sA,cA,cV;fp=squarePerimeter;/函数指针赋值sP=fp(sL);fp=squareArea;/修改函数指针sA=fp(sL);fp=cubeArea;/修改函数指针cA=fp(sL);fp=cubeVolume;/修改函数指针cV=fp(sL);cout边长是:sLendl;cout正方形的周长是:sPendl;cout正方形的面积是:sAendl;cout正方体的面积是:cAendl;cout正方体的体积是:cVendl;return 0;,25,double sq
10、uarePerimeter(double sideLength)return sideLength*4;double squareArea(double sideLength)return sideLength*sideLength;double cubeArea(double sideLength)return sideLength*sideLength*6;double cubeVolume(double sideLength)return sideLength*sideLength*sideLength;,26,char(*tr)(int);/tr为指向函数的指针,该函数返回一个字符ch
11、ar*tr(int);tr为返回一个指针的函数,该指针指向字符型数据,#include char*fun(char tt)for(int i=0;tti;i+)if(ttia),函数指针与返回指针类型的函数,27,4)const 的约束 通过添加const 关键词,可对指针中的地址值,或指针地址中的数据内容,规定为不变。(1)指向常量的指针无论指向哪个数据,都以“只读”的形式指向,即不能用指针变量的间接形式去修改数据。格式 const 数据类型*指针变量名/格式1 数据类型 const*指针变量名/格式2 举例 const int*pi;/也可书写为 int const*pi;int a=22
12、;pi=/错误,5.1 指针类型,28,4)const 的约束(2)指针常量指针常量,是指在初始化后,不能再修改它的指向。格式数据类型*const 指针变量名举例int a=22;int*const p=/错误,5.1 指针类型,29,4)const 的约束(3)指向常量的指针常量指针本身和所指对象的值,在定义之后都限制为只读的指针。既不能通过指针去修改指向的变量的值,又不能更改指向格式const 数据类型*const 指针变量名/格式1数据类型 const*const 指针变量名/格式2举例const int*const p=,5.1 指针类型,30,5.2 数组,定义 用一个名称,表示一组
13、数据类型相同,并连续存储的多个数据的集合。包括 1)一维数组 2)多维数组 3)字符数组和字符串 4)指针数组,31,1)一维数组(1)定义定义格式 数据类型 数组名 长度表达式;示例 int a5;double b10;int c0;/c有48个元素注意 数组长度必须是整型表达式。C+中,数组下标从0开始。长度为n的数组,下标从0到n-1。对a,其元素依次为 a0 a1,,a4,5.2 数组,32,1)一维数组(2)初始化 数组可在定义时依次对元素赋值,并可省略长度。int a3=1,2,3;/等同于int a=1,2,3;int a3=1,2,3,4;/错误,下标超过数组长度也可定义后,按
14、下标,对每个元素赋值。int a3;a0=1;a1=2;a2=3;注意 未初始化的确数组元素,会被赋一个随机数。示例:书上代码5_8,5.2 数组,33,/问题:数组的定义与初始化/源程序:5_8.cpp#include int main()int a3=1,2,3;int b3=1;int i;double d3;d0=1.1;d1=2.2;d2=3.3;static int e4;/对静态数组,自动初始化const int f2=10,20;/const约束的数组coutarray a:;for(i=0;i=2;i+)coutai;coutendl;/显示a数组元素coutarray b:
15、;for(i=0;i3;i+)coutbi;coutendl;/显示b数组元素coutarray d:;for(i=0;i3;i+)coutdi;coutendl;/显示d数组元素coutarray e:;for(i=0;i4;i+)coutei;coutendl;/显示e数组元素return 0;,34,1)一维数组(3)数组访问 访问方式1 通过数组名 加 下标 访问。int a3=1,2,3;a0+=1;cout*(a+1);/输入第2个元素的值 示例:书上代码5_10,5.2 数组,35,/问题:以数组下标访问/源程序:5_9.cpp/#include int main()int a1
16、0;int i;for(i=0;i10;i+)ai=i;/写入for(i=0;i10;i+)/输出数组a的全部元素coutai“”;/读出coutendl;couta10endl;/越出数组a的界限,编译器不检查;输出随机数return 0;,36,以指针方式访问数组 对int a5=1,2,3,4,5;int*p=/p指向a的地址此时,有*p 与 a0 相等/*(p+1)与 a1 相等*(p+2)与 a2 相等*(p+3)与 a3 相等*(p+4)与 a4 相等,37,/问题:以指针方式访问数组/源程序:5_10.cpp#include int main()int a=1,2,3,*p,i;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 了解 指针 变量 概念
链接地址:https://www.31ppt.com/p-5186402.html