C语言程序设计数组指针与字符串.pptx
《C语言程序设计数组指针与字符串.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计数组指针与字符串.pptx(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1数组的概念 数组是具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量称为该数组的元素。数组属于构造类型。数 组第1页/共88页2数组的几点说明 数组的定义形式同C语言中的数组。数组名是常量,表示数组元素的首地址。数组下标从零开始。下标必须是整形表达式。数组元素可以在定义时直接给出初始值列表。数组元素作函数参数同简单变量作函数参数。数组名作函数参数传递的是地址值。二维数组在内存中按行存放。数 组第2页/共88页3对象数组声明:类名 数组名元素个数;访问方法:数组名下标.成员名 数 组第3页/共88页4对象数组初始化数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象。通过初
2、始化列表赋值。Point A2=Point(1,2),Point(3,4);如果没有为数组元素指定显式初始值,数组元素便使用默认值初始化(调用默认构造函数或带默认形参值的构造函数)。Point A2=Point(1,2);数 组第4页/共88页5数组元素所属类的构造函数各元素对象的初值要求为相同的值时,可以声明具有默认形参值的构造函数。各元素对象的初值要求为不同的值时,需要声明带形参的构造函数。当数组中每一个对象被删除时,系统都要调用一次析构函数。数 组第5页/共88页6 数 组#includeusing namespace std;class Point public:Point();Poi
3、nt();Point:Point()coutDefault Constructor called.endl;Point:Point()coutDestructor called.endl;void main()Point A2;P163 例6-3第6页/共88页7声明 例:int i;int i;int*i_pointer;int*i_pointer;概念 指针:内存地址,用于间接访问内存单元 指针变量:用于存放地址的变量20003i_pointer*i_pointeri2000引用 i_pointer=&i;=&i;i=3;i=3;*i_pointer=3;*i_pointer=3;指 针指
4、针变量的概念第7页/共88页8l 语法形式 存储类型 数据类型*指针名初始地址;例:int a,*pa=&a;int a,*pa=&a;l 注意事项用变量地址作为初值时,该变量必须在指针初始化之前已说明过,且变量类型应与指针类型一致。可以用一个已赋初值的指针去初始化另一个指针变量。不要用一个内部autoauto变量去初始化staticstatic指针。指 针指针变量的初始化第8页/共88页9指针名=地址向指针变量赋的值必须是地址常量或变量,不能是普通整数。但可以赋值为整数0,表示空指针。指针的类型是它所指向变量的类型,而不是指针本身数据值的类型,任何一个指针本身的数据值都是unsigned l
5、ong int型。允许声明指向 void 类型的指针。该指针可以被赋予任何类型对象的地址。但是不能通过void类型的指针间接访问所指向的变量,必须经过强制类型转换。指 针指针变量的赋值第9页/共88页10例6-6 void类型指针的使用#includeusing namespace std;/void vobject;/错,不能声明void类型的变量void*pv;/对,可以声明void类型的指针int *pint;int i;void main()couti=iendl;pv=&i;/void类型指针指向整型变量 /cout*pv=*pvendl;/错,不能访问 pint=(int*)pv;
6、cout*pint=*pintendl;指 针cout*pv=*(int*)pvendl;第10页/共88页11指针变量的算术运算指针与整数的加减运算指针p p加上或减去n n,其意义是指针当前指向位置的前方或后方第n n个数据的地址。这种运算的结果值取决于指针指向的数据类型。指针自增,自减运算指向下一个或前一个数据。例如:y=*px+y=*px+相当于 y=*(px+)y=*(px+)(*(*和+优先级相同,自右向左运算)指 针第11页/共88页papa-2pa-1pa+1pa+2pa+3*(pa-2)*pa*(pa+1)*(pa+2)*(pa+3)*(pa-1)short*pashort*
7、pa12第12页/共88页pb-1pbpb+1pb+2*(pb-1)*pb*(pb+1)*(pb+2)long*pblong*pb13第13页/共88页14关系运算指向相同类型数据的指针之间可以进行=与!=的关系运算。指向不同数据类型的指针,以及指针与一般整数变量之间的关系运算是无意义的。指针可以和零之间进行等于或不等于的关系运算。例如:p=0p=0或p!=0p!=0指针变量的关系运算指针变量的关系运算 指 针第14页/共88页15指向数组元素的指针声明与赋值例:int a10,*pa;int a10,*pa;pa=&a0;pa=&a0;或 pa=a;pa=a;通过指针引用数组元素经过上述声明
8、及赋值后:*papa就是a0a0,*(pa+i)(pa+i)就是ai.ai.ai,*(pa+i),*(a+i),paiai,*(pa+i),*(a+i),pai都是等效的。不能写 a+a+,因为a a是数组首地址(是常量)。指 针第15页/共88页16指针数组指针数组数组的元素是指针类型例:Point *pa2;由pa0,pa1两个指针组成 指 针第16页/共88页17例6-8 利用指针数组存放单位矩阵#include using namespace std;void main()int line1=1,0,0;/声明数组,矩阵的第一行int line2=0,1,0;/声明数组,矩阵的第二行i
9、nt line3=0,0,1;/声明数组,矩阵的第三行int*p_line3;/声明整型指针数组p_line0=line1;/初始化指针数组元素p_line1=line2;p_line2=line3;指 针第17页/共88页/输出单位矩阵 coutMatrix test:endl;for(int i=0;i3;i+)for(int j=0;j3;j+)cout ;coutendl;输出结果为:Matrix test:Matrix test:1 0 01 0 00 1 00 1 00 0 10 0 118 指 针也可以写成:p_lineij或*(*(p_line+i)+j)*(p_linei+j
10、)第18页/共88页19例6-9 二维数组举例#include using namespace std;void main()int a23=11,12,13,21,22,23;int (*p1)3=a;for(int i=0;i2;i+)for(int j=0;j3;j+)cout*(*(p1+i)+j);coutendl;指 针可以写成:*(p1i+j)或p1ij第19页/共88页20例6-9 二维数组举例#include using namespace std;void main()int a23=11,12,13,21,22,23;int*p1=a;for(int i=0;i2;i+)
11、for(int j=0;j3;j+)cout*p1+;coutendl;指 针在C+中这种赋值是错误的。第20页/共88页21以指针作为函数参数以指针作为函数参数以地址方式传递数据,可以用来返回函数处理结果。实参是数组名时形参可以是指针。指针与函数第21页/共88页22例6-10题目:读入三个浮点数,将整数部分和小数部分分别输出#include using namespace std;void splitfloat(float x,int*intpart,float*fracpart)*intpart=int(x);/取x的整数部分 *fracpart=x-*intpart;/取x的小数部分
12、指针与函数第22页/共88页void main()int i,n;float x,f;coutEnter three(3)floating point numbers endl;for(i=0;i x;splitfloat(x,&n,&f);coutInteger Part is n Fraction Part is fendl;23 指针与函数第23页/共88页运行结果:Enter three(3)floating point numbers 4.7Integer Part is 4 Fraction Part is 0.78.913Integer Part is 8 Fraction Pa
13、rt is 0.913-4.7518Integer Part is-4 Fraction Part is-0.751824 指针与函数第24页/共88页25例:输出数组元素的内容和地址#include#include using namespace std;void Array_Ptr(long*P,int n)int i;coutIn func,address of array is unsigned long(P)endl;coutAccessing array using pointers endl;for(i=0;i n;i+)cout Address for index i is u
14、nsigned long(P+i);cout Value is*(P+i)endl;指针与函数第25页/共88页void main()long list5=50,60,70,80,90;coutIn main,address of array is unsigned long(list)endl;coutendl;Array_Ptr(list,5);26第26页/共88页运行结果:In main,address of array is 6684132In func,address of array is 6684132Accessing array using pointers Address
15、 for index 0 is 6684132 Value is 50 Address for index 1 is 6684136 Value is 60 Address for index 2 is 6684140 Value is 70 Address for index 3 is 6684144 Value is 80 Address for index 4 is 6684148 Value is 9027第27页/共88页28指针型函数指针型函数 当函数的返回值是地址时,该函数就是指针型函数。定义形式:返回值类型 *函数名(参数表)函数体 指针与函数第28页/共88页29指针型函数指
16、针型函数#include using namespace std;char*ch(char s)int i;for(i=0;si!=0;i+)if(si=A)break;return s+i;void main()char*s=ThbikAjiklom;coutch(s)endl;指针与函数第29页/共88页30声明形式数据类型 (*函数指针名)();含义:数据指针指向数据存储区,而函数指针指向的是程序代码存储区。指向函数的指针 指针与函数第30页/共88页31例6-11函数指针#include using namespace std;void print_stuff(float data_t
17、o_ignore);void print_message(float list_this_data);void print_float(float data_to_print);void(*function_pointer)(float);void main()float pi=(float)3.14159;float two_pi=(float)2.0*pi;指针与函数第31页/共88页 print_stuff(pi);function_pointer=print_stuff;function_pointer(pi);function_pointer=print_message;functi
18、on_pointer(two_pi);function_pointer(13.0);function_pointer=print_float;function_pointer(pi);print_float(pi);32 指针与函数第32页/共88页void print_stuff(float data_to_ignore)coutThis is the print stuff function.n;void print_message(float list_this_data)coutThe data to be listed is list_this_dataendl;void print
19、_float(float data_to_print)coutThe data to be printed is data_to_printendl;33 指针与函数第33页/共88页运行结果:This is the print stuff function.This is the print stuff function.The data to be listed is 6.283180The data to be listed is 13.000000The data to be printed is 3.141590The data to be printed is 3.14159034
20、 指针与函数第34页/共88页35指向常量的指针int i=13;int const*p=&i;/指向常量的指针变量注:不能通过指针来改变所指对象的值,指针所指向的对象的值(i的值)可以通过直接访问方式进行更新,指针本身的值也可以改变,可以指向另外的对象。指 针第35页/共88页36#includeusing namespace std;void main()int i=13;int*p=&i;i+;(*p)+;coutiends*pendl;指 针#includeusing namespace std;void main()int i=13;int const*p=&i;i+;(*p)+;c
21、outiends*p成员名ptr-getx()相当于(*ptr).getx();对 象 指 针第39页/共88页40对象指针应用举例void main()Point A(5,10);Point*ptr;ptr=&A;int x;x=ptr-GetX();coutxX=xx;this-Y=yy;this 指 针第42页/共88页43this指针 一般的程序设计中,通常不直接使用this指针来引用对象成员。this是一个指针变量,因此在成员函数中,可以使用*this来标识正在调用该函数的对象。this 指 针第43页/共88页44#include using namespace std;class
22、 Pointpublic:Point(int X,int Y);int GetX()return X;int GetY()return Y;private:int X,Y;Point:Point(int X,int Y)this-X=X;this-Y=Y;void main()Point p(4,5);coutp.GetX()endsp.GetY()X=X;this-Y=Y;coutGetX()endsGetY()endl;coutGetX()endsGetY();coutendl;cout(*this).GetX()ends(*this).GetY();coutendl;this 指 针效果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 数组 指针 字符串
限制150内