指针的定义与应用课件.ppt
《指针的定义与应用课件.ppt》由会员分享,可在线阅读,更多相关《指针的定义与应用课件.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第1515章章 指指 针针西南交通大学软件学院西南交通大学软件学院计算机基础教研室计算机基础教研室C+C+编程导论编程导论1本章主要内容本章主要内容vC+C+中指针的基本概念中指针的基本概念v指针类型变量的定义方法指针类型变量的定义方法v指针与地址运算符指针与地址运算符v指针变量赋值、指针的运算指针变量赋值、指针的运算v通过指针类型的变量去访问某个变量或数组元素通过指针类型的变量去访问某个变量或数组元素的值的值v引用引用v动态分配内存动态分配内存v按引用调用按引用调用2什么是地址什么是地址?l计算机的内存储器就象一个巨大的一计算机的内存储器就象一个巨大的一维数组维数组,每个数组元素就是一个存
2、储每个数组元素就是一个存储单元(在微型计算机中其大小通常为单元(在微型计算机中其大小通常为一个字节)。一个字节)。l就象数组中的每个元素都有一个下标就象数组中的每个元素都有一个下标一样一样,每个内存单元都有一个编号每个内存单元都有一个编号,又又称地址。称地址。3什么是地址什么是地址?l在运行一个程序时在运行一个程序时,程序本身及其所程序本身及其所用到的数据都要放在内存储器中:程用到的数据都要放在内存储器中:程序、函数、变量、常数、数组和对象序、函数、变量、常数、数组和对象等等,在内存储器中占有一席之地。在内存储器中占有一席之地。l存放在内存储器中的程序和数据都有存放在内存储器中的程序和数据都有
3、一个地址一个地址,用它们占用的那片存储单用它们占用的那片存储单元中的第一个存储单元的地址表示。元中的第一个存储单元的地址表示。4什么是地址什么是地址?l在在C+中,为某个变量或者函数分配中,为某个变量或者函数分配内存储器的工作由编译程序完成。内存储器的工作由编译程序完成。l内存地址的访问方式内存地址的访问方式直接访问方式:通过变量名访问直接访问方式:通过变量名访问间接访问方式:通过地址访问间接访问方式:通过地址访问5如何知道某个变量、数组、函数的地址如何知道某个变量、数组、函数的地址+规定规定:v变量的地址可以使用地址运算符变量的地址可以使用地址运算符&求得。求得。例如例如,&x表示变量表示变
4、量x的地址的地址;v数组的地址数组的地址,即数组第一个元素的地即数组第一个元素的地址址,可以直接用数组名表示可以直接用数组名表示;v函数的地址用函数名表示。函数的地址用函数名表示。6什么是指针什么是指针l指针是指针是C+语言中的一种数据类型,语言中的一种数据类型,是专门用来处理地址的。是专门用来处理地址的。l指针是某个内存单元的首地址。指针是某个内存单元的首地址。7什么是指针变量?什么是指针变量?v指针变量是包含另一个变量地址的变指针变量是包含另一个变量地址的变量。量。v指针变量也是一个变量,遵循先定义,指针变量也是一个变量,遵循先定义,后使用。后使用。v定义指针变量的类型是由该指针指向定义指
5、针变量的类型是由该指针指向的变量类型决定。的变量类型决定。8指针变量的概念定义例:int i;int*i_pointer;指向整型变量的指针内存用户数据区内存用户数据区变量变量i变量变量j变量变量i_pointer3620002000200430109指针变量的声明指针变量的声明变量的指针变量的指针:变量在内存中的存放起始地址:变量在内存中的存放起始地址指针变量的声明:指针变量的声明:类型标识符*指针变量例如:例如:int*p;定义语句中的定义语句中的“*”表示该变量为指针变量表示该变量为指针变量一个指针变量只能存储同一种类型变量的地址一个指针变量只能存储同一种类型变量的地址10指针变量的初始
6、化v语法形式语法形式类型标识符类型标识符*指针名初始地址;指针名初始地址;例:例:int*pa=&a;11指针变量的初始化v注意事项注意事项用变量地址作为初值时,该变量必须在指用变量地址作为初值时,该变量必须在指针初始化之前定义。针初始化之前定义。如:如:inta;int*pa=&a;已赋初值的指针可以初始化另一已赋初值的指针可以初始化另一个指针变个指针变量。量。int*pa=&a;int*pb;pb=pa;12指针与地址运算符指针与地址运算符l“&”在执行语句中作为取地址运算符,它是一元运算符,返回操作数的地址,操作数必须是变量名。l“*”除了可以在声明语句中声明指针时使用外,还可以在执行语
7、句中作为为指针运算符使用,也称为“间接访问”运算符,指针运算符是一元运算符,指针运算符*表示指针所指向的变量的值。&a&a:取变量:取变量a a的地址。的地址。*a*a:指针变量所指向的变量的值。:指针变量所指向的变量的值。int y=5;int*p;p=&y;cout*p;int y=5;int*p;p=&y;cout*p;13指针与地址运算符指针与地址运算符l*出现在声明语句和执行语句中出现在声明语句和执行语句中的含义是不同的。的含义是不同的。l int*p;int*p;/*/*在声明语句中表在声明语句中表示声明的是指针,声明示声明的是指针,声明p p是整型指是整型指针针l cout*p;
8、cout*p;/*/*在执行语句中表在执行语句中表示指针所指对象的内容示指针所指对象的内容14指针变量的赋值运算指针变量的赋值运算指针变量指针变量=地址地址v p=&a;p=&a;v p=array;/p=array;/将数组的首地址赋值给将数组的首地址赋值给p pv p=&arrayi;/p=&arrayi;/将数组的第将数组的第i i个元个元素的地址赋值给素的地址赋值给p pv p=max;/p=max;/将函数将函数maxmax的入口地址赋的入口地址赋给给p pv p1=p2;/p1=p2;/将指针将指针p2p2的值赋个指针的值赋个指针p1p115指针变量的赋值运算指针变量的赋值运算指针
9、变量指针变量=地址地址v不不能能把把常常量量或或表表达达式式的的地地址址赋赋给给指指针针变变量量。如:如:P=&67P=&67;P=&(i+5)P=&(i+5)是非法的是非法的 v不不能能将将一一个个整整数数赋赋给给指指针针变变量量,但但可可以以赋赋整整数值数值0 0,表示该指针空指针,不指向任何内容。,表示该指针空指针,不指向任何内容。v指针的类型是它所指向变量的类型。指针的类型是它所指向变量的类型。v允许声明指向允许声明指向 void void 类型的指针。该指针可类型的指针。该指针可以被赋予任何类型对象的地址。以被赋予任何类型对象的地址。例:例:void*general;void*gen
10、eral;16例例1 指针的定义、赋值与使用指针的定义、赋值与使用#includeusingnamespacestd;voidmain()int*i_pointer;inti;i_pointer=&i;i=10;cout“Outputinti=”iendl;coutOutputintpointeri=*i_pointerendl;17程序运行的结果是:程序运行的结果是:Outputinti=10Outputintpointeri=1018指针变量的算术运算指针变量的算术运算v指针与整数的加减运算指针与整数的加减运算指针指针 p p 加上或减去加上或减去 n n,其意义是指其意义是指针当前指向位
11、置的前方或后方第针当前指向位置的前方或后方第 n n 个数据的地址。个数据的地址。这种运算的结果值取决于指针指向的这种运算的结果值取决于指针指向的数据类型。数据类型。v指针加一,减一运算指针加一,减一运算指向下一个或前一个数据。指向下一个或前一个数据。19papa-2pa-1pa+1pa+2pa+3*(pa-2)*pa*(pa+1)*(pa+2)*(pa+3)*(pa-1)short*pa20pb-1pbpb+1pb+2*(pb-1)*pb*(pb+1)*(pb+2)int *pb21v关系运算关系运算 两个指针变量指向同一个数组中的元两个指针变量指向同一个数组中的元素时,其关系运算的结果表明
12、了这两个素时,其关系运算的结果表明了这两个指针变量所指向的数组元素的先后关系指针变量所指向的数组元素的先后关系 指针可以和零之间进行等于或不等于指针可以和零之间进行等于或不等于的关系运算。例如的关系运算。例如:p=0p=0或或p!=0p!=022指针的关系运算指针的关系运算例如:例如:char a10;char*p1,*p2;p1=a+2;p2=a+4;p1+;p2-;23指向数组元素的指针指向数组元素的指针v定义与赋值定义与赋值例:int a10,*pa;pa=&a0;或 pa=a;24指向数组元素的指针指向数组元素的指针v通过指针引用数组元素通过指针引用数组元素v经过上述声明及赋值后,在执
13、行语句经过上述声明及赋值后,在执行语句中中*pa就是就是a0,*(pa+1)就是就是a1,.,*(pa+i)就是就是ai.ai,*(pa+i),*(a+i),pai都是等效的。都是等效的。不能写不能写a+,因为因为a是数组首地址是常是数组首地址是常量。量。25应用举例应用举例2设有一个int型数组a,有10个元素。用四种方法访问数组的各个元素:E使用数组名和下标E使用数组名和指针运算E使用指针变量E使用下标表示法引用指针指向的数组元素26#includeusingnamespacestd;voidmain()inta10;inti,*p;for(i=0;iai;for(i=0;i10;i+)c
14、out*(a+i);for(p=a;p-a10;p+)cout*p;p=a;for(i=0;i10;i+)coutpi;27应用举例应用举例3#include#includeusingnamespacestd;voidmain()constintM=20,N=10;intaM,bN,cM;intd,e,f=0,*pa,*pb,*pc;从键盘输入整数集合从键盘输入整数集合a a、b b的元素个的元素个数和各个元素的值,计算并输出其交集数和各个元素的值,计算并输出其交集28cout输入数组输入数组a中元素的个数:中元素的个数:d;cout输入数组输入数组a的的d个元素:个元素:endl;for(p
15、a=a;pa*pa;cout输入数组输入数组b中元素的个数:中元素的个数:e;cout输入数组输入数组b的的e个元素:个元素:endl;for(pb=b;pb*pb;29for(pa=a,pc=c;paa+d;pa+)for(pb=b;pbb+e;pb+)if(*pa=*pb)*pc+=*pa;f+;break;cout交集交集c的各个元素依次为的各个元素依次为:endl;for(pc=c;pcc+f;pc+)coutsetw(3)*pc;30应用举例应用举例4#include#includeusingnamespacestd;voidmain()constintM=20,N=10;intaM
16、,bN,cM+N;intd,e,f=0,*pa,*pb,*pc;从键盘输入整数集合从键盘输入整数集合a a、b b的元素个的元素个数和各个元素的值,计算并输出其并集数和各个元素的值,计算并输出其并集31cout输入数组输入数组a中元素的个数:中元素的个数:d;cout输入数组输入数组a的的d个元素:个元素:endl;for(pa=a;pa*pa;cout输入数组输入数组b中元素的个数:中元素的个数:e;cout输入数组输入数组b的的e个元素:个元素:endl;for(pb=b;pb*pb;32for(pa=a,pc=c;paa+d;pa+,pc+)*pc=*pa;f+;for(pb=b;pbb
17、+e;pb+)for(pa=a;pa=a+d)*pc+=*pb;f+;cout“并集并集c的各个元素依次为的各个元素依次为:endl;for(pc=c;pcc+f;pc+)coutsetw(3)p2;cinp2;正确的正确的/等价于等价于cina;cina;35字符指针的定义、赋值和引用字符指针的定义、赋值和引用-例例5#include#includeusingnamespacestd;voidmain()char*p,sa20,sb20;inti;p=sa;strcpy(sa,“TodayisSunday.”);for(i=0;*(sa+i)!=0;i+)sbi=*p+;sbi=0;p=sb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 定义 应用 课件
限制150内