欢迎来到天天文库
浏览记录
ID:50503857
大小:152.00 KB
页数:42页
时间:2020-03-10
《面向对象程序设计C++教程 教学课件 作者 于帆 赵妮 闫谦时第6章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第六章指针西安工业大学于帆本章主要内容地址和指针变量指针的使用与操作数组指针动态内存操作函数指针关于内存地址内存空间的访问方式通过变量名访问通过地址访问地址运算符:&例:intvar;则&var表示变量var在内存中的起始地址声明例:staticinti;staticint*i_pointer=&i;指向整型变量的指针概念指针:内存地址,用于间接访问内存单元指针变量:用于存放地址的变量20003i_pointer*i_pointeri2000内存用户数据区变量i变量j变量i_pointer362
2、000200020043010引用例1:i=3;例2:*i_pointer=3;指针变量的概念语法形式存储类型数据类型*指针名=初始地址;例:int*pa=&a;注意事项用变量地址作为初值时,该变量必须在指针初始化之前已说明过,且变量类型应与指针类型一致。可以用一个已赋初值的指针去初始化另一个指针变量。不要用一个内部auto变量去初始化static指针。指针变量的初始化指针变量的赋值运算指针名=地址“地址”中存放的数据类型与指针类型必须相符。向指针变量赋的值必须是地址常量或变量,不能是普通整数。但
3、可以赋值为整数0,表示空指针。指针的类型是它所指向变量的类型,而不是指针本身数据值的类型,任何一个指针本身的数据值都是unsignedlongint型。允许声明指向void类型的指针。该指针可以被赋予任何类型对象的地址。例:void*general;指针的声明、赋值与使用#includeusingnamespacestd;intmain(){int*i_pointer;//声明int型指针i_pointerinti;//声明int型数ii_pointer=&i;//取i的地址赋
4、给i_pointeri=10;//int型数赋初值cout<<"Outputinti="<
5、ntmain(){pv=&i;//void类型指针指向整型变量//void指针赋值给int指针需要类型强制转换:pint=(int*)pv;}指向常量的指针不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的对象。例1char*name1="John";//name1是一般指针*name1='A';//编译正确,运行出错例2constchar*name1="John";//指向常量的指针chars[]="abc";name1=s;//正确,name1本身的值可以改变*name1='1
6、';//编译时指出错误指针类型的常量若声明指针常量,则指针本身的值不能被改变。例:char*constname2="John";name2="abc";//错误,指针常量值不能改变指针变量的算术运算指针与整数的加减运算指针p加上或减去n,其意义是指针当前指向位置的前方或后方第n个数据的地址。这种运算的结果值取决于指针指向的数据类型。指针加一,减一运算指向下一个或前一个数据。例如:y=*px++相当于y=*(px++)(*和++优先级相同,自右向左运算)papa-2pa-1pa+1pa+2pa+3
7、*(pa-2)*pa*(pa+1)*(pa+2)*(pa+3)*(pa-1)short*pa13pb-1pbpb+1pb+2*(pb-1)*pb*(pb+1)*(pb+2)long*pb14关系运算指向相同类型数据的指针之间可以进行各种关系运算。指向不同数据类型的指针,以及指针与一般整数变量之间的关系运算是无意义的。指针可以和零之间进行等于或不等于的关系运算。例如:p==0或p!=0赋值运算向指针变量赋的值必须是地址常量或变量,不能是普通整数。但可以赋值为整数0,表示空指针。指针变量的关系运算指向
8、数组元素的指针声明与赋值例:inta[10],*pa;pa=&a[0];或pa=a;通过指针引用数组元素经过上述声明及赋值后:*pa就是a[0],*(pa+1)就是a[1],...,*(pa+i)就是a[i].a[i],*(pa+i),*(a+i),pa[i]都是等效的。不能写a++,因为a是数组首地址是常量。例设有一个int型数组a,有10个元素。用三种方法输出各元素:使用数组名和下标使用数组名和指针运算使用指针变量intmain(){inta[10];inti;for(i=0;
此文档下载收益归作者所有