资源描述:
《C++程序设计 工业和信息化普通高等教育十二五 规划教材立项项目 教学课件 作者 姚琳 C++程序设计第6章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第六章指针和引用第六章指针6.1指针的概念6.2指针与数组6.3指针和函数6.4动态存储分配6.5引用6.1指针的概念为什么要引入指针的概念?指针可以有效地表示复杂数据结构,如队列、栈、链表等。指针能象汇编语言一样处理内存地址,为动态内存分配提供支持。指针可实现对数组和字符串的方便使用,提高某些子程序的效率。6.1指针的概念关于指针的原则学习原则一定要学会其实通常的应用很简单使用原则永远要清楚每个指针指向了哪里2021/7/234/822021/7/235/82main(){inta=5;intb;floatx=3.5;…}变量的两个物理意义6.1.1指针和指针变量10
2、01100210031004…1015101610171018…2002200320042005abx5×35.0变量的内容变量的内容变量的内容变量的地址变量的地址变量的地址变量的地址和变量的内容变量的地址变量所分配存储空间的首地址变量的内容变量在所分配的存储空间中存放的数据2021/7/236/822021/7/237/82main(){inta,b;floatx=35;a=5;b=a+3;…}1001100210031004…1015101610171018ab5直接将整数5存入变量a直接将变量a的值取出,相加后存入变量b利用变量名存取数据的方式称为“直接存取”方式
3、。直接存取和间接存取82021/7/238/82C语言还提供了对内存单元的“间接存取”方式p1001100210031004…1015101610171018…2004200520062007ab51001p1001a3main(){inta=5,b=3,*p;p=&a;*p=a+b;…}变量的地址称为变量的指针存放地址的变量称为指针变量p指向c,c为p所指向的目标变量。直接存取和间接存取82021/7/239/58intmain(){floatx,*p1=NULL;float*p2=&x;inty,*p3=&y;charname[20],*cp=name;…}2000
4、…2004…2008…2012…2016…2020…2040xp1p2yp3namecp20006.1.2指针变量的定义NULLintmain(){floatx,*p1,*p2;inty,*p3;charname[20];char*cp;…}指针变量定义的形式指针变量初始化数据类型*指针变量名201220206.1.2指针变量的定义说明:当把一个变量的地址作为初值赋给指针时,该变量必须先给以定义,且该变量的数据类型必须与指针的数据类型一致也可把一个已初始化的指针值作为初值赋予另一指针也可通过初始化定义某种类型的空指针2021/7/2310/822021/7/2311/8
5、26.1.3指针的基本运算取地址运算&&变量名或数组元素名inti,*p;p=&i;int*p,a[10];p=a;int*p,a[10];p=&a[0];int*p,a[10];p=&a[5];间接存取运算**指针变量或目标变量的地址inti,*p;p=&i;*p=0;int*p,a[10];p=a;*p=0;int*p,a[10];p=&a[0];*p=0;pa——指针变量*pa——指针pa的目标变量&pa——指针变量pa占用存储区域地址2021/7/2312/822000200120022003200420052006200720082009a
6、pxq20046.1.3指针的基本运算2000*p=&a;×intmain(){inta,*p;floatx,*q;p=&a;q=&x;…}赋值运算56.1.3指针的基本运算赋值运算把一个变量的地址赋给一个同类型的指针,如:inta,*pa;pa=&a;/*使pa指向变量a*/把一个指针的值赋给另一同类型的指针,如:charc,*s1=&c,*s2;s2=s1;/*结果s1和s2指向同一变量c*/2021/7/2313/826.1.3指针的基本运算赋值运算将地址常量如数组名赋给同类型的指针,如:char*str,ch[80];str=ch;/*使str得到字符数组ch的
7、首地址,即str指向数组ch*/同类型指针算术运算的结果,如果还是地址量的话,可以赋值给同类型的指针。例如:int*p1,*p2,a[20];p1=a;p2=p1+5;p1=p2-3;2021/7/2314/822021/7/2315/82方法1:目标变量值不变,改变指针变量的指向求解。#includeusingnamespacestd;intmain(){inta,b,*p1,*p2,*p;p1=&a;p2=&b;cin>>*p1>>*p2;if(*p1<*p2){p=p1;p1=p2;p2=p;}cout<<“a