六章数组、指针与字符串.ppt
《六章数组、指针与字符串.ppt》由会员分享,可在线阅读,更多相关《六章数组、指针与字符串.ppt(76页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、12/7/20221 C+语言程序设计语言程序设计C+语言程序设计语言程序设计 第二单元第二单元 指针指针112/7/20222 C+语言程序设计语言程序设计教学要求:教学要求:教学要求:教学要求:1.1.掌握数组的概念和使用;掌握数组的概念和使用;掌握数组的概念和使用;掌握数组的概念和使用;2.2.掌握指针的概念、运算、指针数组和对象指针;掌握指针的概念、运算、指针数组和对象指针;掌握指针的概念、运算、指针数组和对象指针;掌握指针的概念、运算、指针数组和对象指针;3.3.掌握动态内存分配的应用;掌握动态内存分配的应用;掌握动态内存分配的应用;掌握动态内存分配的应用;4.4.掌握字符串的应用;
2、掌握字符串的应用;掌握字符串的应用;掌握字符串的应用;教学重点:教学重点:教学重点:教学重点:1.1.数组的声明、存储,数组作为参数和对象数组数组的声明、存储,数组作为参数和对象数组数组的声明、存储,数组作为参数和对象数组数组的声明、存储,数组作为参数和对象数组 2.2.指针的声明、运算,处理数组元素,对象指针指针的声明、运算,处理数组元素,对象指针指针的声明、运算,处理数组元素,对象指针指针的声明、运算,处理数组元素,对象指针 3.new 3.new运算和运算和运算和运算和 delete delete运算运算运算运算教学难点:教学难点:教学难点:教学难点:1.1.指针的概念指针的概念指针的概
3、念指针的概念 2.2.指针作为函数参数,处理数组元素,对象指针指针作为函数参数,处理数组元素,对象指针指针作为函数参数,处理数组元素,对象指针指针作为函数参数,处理数组元素,对象指针 212/7/20223 C+语言程序设计语言程序设计第六章第六章 数组数组 指针与字符串指针与字符串教学目的教学目的:通过本章的学习,学生应掌握使用数组;掌通过本章的学习,学生应掌握使用数组;掌握字符串数据的组织和处理;掌握指针的概握字符串数据的组织和处理;掌握指针的概念和使用方法;掌握派生类的声明;继承中念和使用方法;掌握派生类的声明;继承中的访问控制。的访问控制。教学重点教学重点:派生类的声明;继承中的访问控
4、制。派生类的声明;继承中的访问控制。教学难点:不同继承方式下对基类成员的访问教学难点:不同继承方式下对基类成员的访问控制控制教学手段:电子教案教学手段:电子教案312/7/20224 C+语言程序设计语言程序设计本章主要内容本章主要内容数组数组指针指针动态存储分配动态存储分配指针与数组指针与数组指针与函数指针与函数字符串字符串412/7/20225 C+语言程序设计语言程序设计6.2指针(关于内存地址)指针(关于内存地址)内存空间的访问方式内存空间的访问方式地址编码地址编码存储单元的地址存储单元的地址基本内存单元基本内存单元从内存单元存取数据的从内存单元存取数据的方法方法通过变量名访问通过变量
5、名访问通过地址访问通过地址访问地址地址存储结构简图存储结构简图地地址址译译码码器器数据数据512/7/20226 C+语言程序设计语言程序设计指针和指针变量指针和指针变量的概念的概念指针:指针:在在C和和C+中,中,将地址形象化地将地址形象化地称为称为“指针指针”。一个。一个变量的地址称为该变量的地址称为该变量的变量的“指针指针”。指针变量:指针变量:专门用来存放地址的专门用来存放地址的变量叫做变量叫做“指针变量指针变量”。内存用户数据区内存用户数据区变量变量 i变量变量 j变量变量 i_pointer362000200020043010612/7/20227 C+语言程序设计语言程序设计 指
6、针变量的应用指针变量的应用指针变量应用的步骤:指针变量应用的步骤:1.声明指针变量声明指针变量 2.给指针变量赋值给指针变量赋值 3.引用指针变量引用指针变量712/7/20228 C+语言程序设计语言程序设计指针变量的声明指针变量的声明定义指针变量的一般形式为:定义指针变量的一般形式为:指针变量的定义与应用指针变量的定义与应用数据类型数据类型 *指针变量名指针变量名例如:例如:int *pointer_1;float *pointer_2;指针变量前面的指针变量前面的“*”,表示该变,表示该变量的类型为量的类型为指针型变量指针型变量。“数据类型数据类型”可以是任意类型,用来可以是任意类型,用
7、来指定该指针变量所指向的变量的类型,称之指定该指针变量所指向的变量的类型,称之为为指针的类型指针的类型。专门用来存专门用来存放放int型数型数据的地址据的地址专门用来存专门用来存放放float型数型数据的地址据的地址812/7/20229 C+语言程序设计语言程序设计指针变量的赋值指针变量的赋值声明一个指针变量,未赋值时其中声明一个指针变量,未赋值时其中的地址值是一个随机的数。因此声明指针的地址值是一个随机的数。因此声明指针变量之后必须先赋值,才可以使用。变量之后必须先赋值,才可以使用。例如:例如:指针变量指针变量 pointer_1 用来存放指向用来存放指向 int 型变量的指针型变量的指针
8、 pointer_2存放指向存放指向 float 型变量的指针型变量的指针。声明时同时初始化:声明时同时初始化:数据类型数据类型 *指针变量名指针变量名=地址;地址;使用赋值语句赋值:使用赋值语句赋值:数据类型数据类型 *指针变量;指针变量;指针变量指针变量=地址;地址;912/7/202210 C+语言程序设计语言程序设计指针变量的赋值指针变量的赋值“&”是是取地址运算符取地址运算符,用来获取一个变量,用来获取一个变量的地址。将获取的变量的地址赋值给指的地址。将获取的变量的地址赋值给指针变量。针变量。不能把不能把普通非普通非 0 整数整数赋值给指针变量。赋值给指针变量。指针变量的定义与应用指
9、针变量的定义与应用int i,*pointer_1;pointer_1=&i;/*将变量将变量 i 的地址存放到指针变量的地址存放到指针变量 pointer_1 中,因此中,因此pointer_1 就就“指向指向”了变量了变量 i */pointer_1&iipointer_1=2000;pointer_1=0;1012/7/202211 C+语言程序设计语言程序设计指针变量的赋值指针变量的赋值使用变量地址赋值时,该变量必须使用变量地址赋值时,该变量必须在赋值之前已声明过,且在赋值之前已声明过,且变量类型应与指变量类型应与指针类型一致针类型一致。可以用一个已赋值的指针变量去赋可以用一个已赋值的
10、指针变量去赋值给另一值给另一 个指针变量。个指针变量。数组名代表数组的起始地址,可以数组名代表数组的起始地址,可以将数组名表示的地址赋值给指针变量将数组名表示的地址赋值给指针变量指针变量的定义与应用指针变量的定义与应用int array 10,*p1;p1=array;int i,*p1,*p2;p1=&i;p2=p1;float f;int *p;p=&f;类型不类型不一致一致1112/7/202212 C+语言程序设计语言程序设计指针变量的赋值指针变量的赋值一般情况下,一种类型的指针变量只一般情况下,一种类型的指针变量只能存放相同类型的变量的地址。能存放相同类型的变量的地址。特殊的特殊的
11、void 类型的指针,可以存放类型的指针,可以存放任何类型的变量的地址。经过任何类型的变量的地址。经过类型强制转类型强制转换换,void 类型的指针可以访问任何类型的类型的指针可以访问任何类型的数据。数据。指针变量的定义与应用指针变量的定义与应用void *p1;int i,*p2;p1=&i;p2=(int*)p1;可以访问可以访问任何类型任何类型的数据的数据指针忘了赋值比整型变量忘了赋值危险得指针忘了赋值比整型变量忘了赋值危险得多。多。例例:int count;int*iPtr;*iPtr=58;iPtr当前指向什么地方?该代码能通过编当前指向什么地方?该代码能通过编译,但没有赋初值的指针
12、译,但没有赋初值的指针iPtr是一个随机地是一个随机地址。址。“*iPtr=58;”是把是把58赋到内存中的随机赋到内存中的随机位置,因此很可能已经破坏了另一变量,位置,因此很可能已经破坏了另一变量,甚至修改了栈中的函数返回地址,计算机甚至修改了栈中的函数返回地址,计算机将死机或进入死循环。将死机或进入死循环。指针没有指针没有赋值这样赋值这样非常危险非常危险1212/7/202213 C+语言程序设计语言程序设计指针变量的引用指针变量的引用“*”是是指针运算符指针运算符,表示指针所指向的变,表示指针所指向的变量。量。指针变量的定义与应用指针变量的定义与应用int i,*p;p=&i;pi*p2
13、3&i i=2;/*通过变量名通过变量名直接访问直接访问*/*p=3;/*p是是 p 所指向的变量,即变量所指向的变量,即变量 i,这是通过指针的这是通过指针的间接访问间接访问*/p 是指针变量,是指针变量,*p 就是就是 p 所指向的变量所指向的变量 i,即即*p 等价于等价于 变量变量 i。1312/7/202214 C+语言程序设计语言程序设计指针变量的引用指针变量的引用指针变量的定义与应用指针变量的定义与应用注意:注意:“*”出现在声明语句中和执行语出现在声明语句中和执行语句中含义不同。句中含义不同。1、“*”出现在声明语句中,表示声明的出现在声明语句中,表示声明的变量是指针变量。变量
14、是指针变量。例如:例如:int *p;2、“*”出现在执行语句中,表示访问出现在执行语句中,表示访问指针所指向的变量。指针所指向的变量。例如:例如:*p=3;printf(“%d n”,*p);例:例:int i=26;int*P=&i ;/初始化为整型地址初始化为整型地址 *P=&i ;/error 不能将不能将“int*P=&i ;”与与“*P=&i ;”混淆。混淆。前者是定义语句,前者是定义语句,*是指针定义符,是指针定义符,C+为为P指针指针分配一个指针空间,并用分配一个指针空间,并用i 的地址值初始化,后的地址值初始化,后者是执行语句,左右两边类型不匹配。者是执行语句,左右两边类型不
15、匹配。*操作符在指针上的两种用途要区分开:定操作符在指针上的两种用途要区分开:定义或声明时,建立一个指针;执行时,间接引用义或声明时,建立一个指针;执行时,间接引用一指针。一指针。也要注意:也要注意:”&”出现在声明语句中和执行语句中其含义是出现在声明语句中和执行语句中其含义是不同的;例:不同的;例:int i,*p;int&rf=i;/表示声明的是引用表示声明的是引用 p=&i;/取地址取地址1412/7/202215 C+语言程序设计语言程序设计例例6-6 指针的声明、赋值与使用指针的声明、赋值与使用#includevoid main()int*i_pointer;/声明声明声明声明int
16、int型指针型指针型指针型指针i_pointeri_pointerint i;/声明声明声明声明intint型数型数型数型数i ii_pointer=&i;/取取取取i i的地址赋给的地址赋给的地址赋给的地址赋给i_pointeri_pointeri=10;/int/int型数赋初值型数赋初值型数赋初值型数赋初值cout“Output int i=”iendl;/输出输出输出输出intint型型型型 /数的值数的值数的值数的值coutOutput int pointer i=*i_pointerendl;/输出输出输出输出intint型指针所指地址的内容型指针所指地址的内容型指针所指地址的内容
17、型指针所指地址的内容1512/7/202216 C+语言程序设计语言程序设计指针变量的地址指针变量的地址指针也是变量,是变量就具有内存地址。指针也是变量,是变量就具有内存地址。所以指针也有地址。所以指针也有地址。例:下面的程序输出例:下面的程序输出iCount变量值,以变量值,以及及iPtr和和iCount的地址值:的地址值:#include int iCount=18;int*iPtr=&iCount;*iPtr=58;cout iCount endl;cout iPrt endl;1612/7/202217 C+语言程序设计语言程序设计 cout&iCount endl;/与与iPtr值相
18、同值相同 cout *iPtr endl;/与与 iCount值相值相同同 cout&iPtr endl;/指针本身的地址指针本身的地址 运行结果:运行结果:58 0 x0067fe00 0 x0067fe00 58 0 x0067fdfciPtr0067:FDFC0067:FE00iCount0067:FE00581712/7/202218 C+语言程序设计语言程序设计指针与整型数的区别指针与整型数的区别指针在使用中必须类型匹配。例:指针在使用中必须类型匹配。例:int iCount=26;int*iPtr=&iCount;/定义语句:定义语句:*在此在此 /处作定义指针变量用,而非间接引用
19、。处作定义指针变量用,而非间接引用。*iPtr=&iCount;/error:不能将整型地不能将整型地/址转换成整型数址转换成整型数 *iPtr=50;/执行语句:执行语句:*在此处作间接引用在此处作间接引用 指针值不是整型数指针值不是整型数赋值语句赋值语句“*iPtr=&iCount;”在在BC中会引起类型转换的错误。中会引起类型转换的错误。(cannot convert int*to int)强制转换是合法。强制转换是合法。例:允许语句例:允许语句“*iPtr=(int)&iCount;”但要注意其赋值的意义。该语句表示将但要注意其赋值的意义。该语句表示将变量变量iCount的地址值作为一
20、个整型数赋给的地址值作为一个整型数赋给变量变量*iPtr,即,即iCount变量。变量。1812/7/202219 C+语言程序设计语言程序设计指针与常量指针与常量(const指针指针)指向常量的指针指向常量的指针 int a=1;int*pi;pi=&a;*pi=58;可以看到,一个指针涉及到两个变量,可以看到,一个指针涉及到两个变量,指针本身指针本身pi 和指向的变量和指向的变量a。修改这两个。修改这两个变量的对应操作为变量的对应操作为“pi=&a;”和和“*pi=58;”。如果不想通过指针间接改变。如果不想通过指针间接改变a的值,的值,可以声明指向常量的指针。可以声明指向常量的指针。不能
21、通过指针来改变所指对象的值不能通过指针来改变所指对象的值,但指但指针本身可以改变针本身可以改变,可以指向另外的对象。可以指向另外的对象。在指针定义语句的类型前加在指针定义语句的类型前加const,表示,表示指向的对象是常量。指向的对象是常量。例:例:int n1=3;int const n2=5;const int *pn=&n1;pn=&n2;/正确正确*pn=6;/错误错误1912/7/202220 C+语言程序设计语言程序设计指针与常量指针与常量 指针常量指针常量若声明指针常量若声明指针常量,则指针本身的值不能被改则指针本身的值不能被改变。变。在指针定义语句的指针名前加在指针定义语句的指
22、针名前加const,表示,表示指针本身是常量。指针本身是常量。例例1:int n1=3;int const n2=5;int *const pn=&n1;pn=&n2;/错误错误*pn=6;/正确正确常量常量常量常量pnpn0067:FDA60067:FDA60067:F0000067:F000DataData区区区区0067:F0000067:F0002012/7/202221 C+语言程序设计语言程序设计void类型指针类型指针 一般情况下一般情况下,指针的值只能赋给相同类型的指指针的值只能赋给相同类型的指针。但是有一种特殊的针。但是有一种特殊的void类型指针类型指针,可以存储任可以存储
23、任何类型的对象地址。何类型的对象地址。例:例:void类型指针的使用类型指针的使用 void vobject;/errorerror,不能声明不能声明不能声明不能声明voidvoid类型的变量类型的变量类型的变量类型的变量 void*pv;/ok ok,可以声明可以声明可以声明可以声明voidvoid类型的指针类型的指针类型的指针类型的指针 int*pint;int i;void main()/void/void类型的函数没有返回值类型的函数没有返回值类型的函数没有返回值类型的函数没有返回值 pv=&i;/void/void类型指针指向整型变量类型指针指向整型变量类型指针指向整型变量类型指针指
24、向整型变量 pint=(int*)pv;/类型强制转换类型强制转换 /void/void类型指针赋值给整型指针类型指针赋值给整型指针类型指针赋值给整型指针类型指针赋值给整型指针2112/7/202222 C+语言程序设计语言程序设计指针与常量指针与常量 指向常量的指向常量的指针常量指针常量可以定义一个指向常量的指针常量,它必须在可以定义一个指向常量的指针常量,它必须在定义时进行初始化。定义时进行初始化。const int ci=7;int ai;const int*const cpc=&ci;/指向常量的指针常量指向常量的指针常量const int*const cpi=&ai;/ok cpi=
25、&ci;/error:指针值不能修改指针值不能修改 *cpi=39;/error:不能修改所指向的对象不能修改所指向的对象 ai=39;/ok常量常量常量常量cpccpc0067:FD660067:FD660067:F600常量常量常量常量ci ci0067:F6000067:F60072212/7/202223 C+语言程序设计语言程序设计指针变量的运算指针变量的运算指针与整数的加减运算指针与整数的加减运算 指针指针 p 加上或减去加上或减去 n,其,其意义意义是指针当是指针当前指向位置的前方或后方第前指向位置的前方或后方第 n 个数据的地个数据的地址。址。这种运算的结果值取决于指针指向的数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 指针 字符串
限制150内