![C++课件-第五章part1指针_第1页](http://file4.renrendoc.com/view/eb098d03d89d4006ecf028e757620f92/eb098d03d89d4006ecf028e757620f921.gif)
![C++课件-第五章part1指针_第2页](http://file4.renrendoc.com/view/eb098d03d89d4006ecf028e757620f92/eb098d03d89d4006ecf028e757620f922.gif)
![C++课件-第五章part1指针_第3页](http://file4.renrendoc.com/view/eb098d03d89d4006ecf028e757620f92/eb098d03d89d4006ecf028e757620f923.gif)
![C++课件-第五章part1指针_第4页](http://file4.renrendoc.com/view/eb098d03d89d4006ecf028e757620f92/eb098d03d89d4006ecf028e757620f924.gif)
![C++课件-第五章part1指针_第5页](http://file4.renrendoc.com/view/eb098d03d89d4006ecf028e757620f92/eb098d03d89d4006ecf028e757620f925.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C\C++程序设计大连理工大学软件学院赖晓晨far.away@C\C++程序设计大连理工大学软件学院1第五章指针与引用第一节指针的概念第二节指针在数组中的运算第三节动态存储第四节const约束访问第五节指针与函数第六节字符指针第七节函数指针第八节指针数组第九节主函数参数第五章指针与引用第一节指针的概念2第一节指针的概念指针是用来存放地址的特殊类型变量,每一种基本数据类型都有相应的指针类型。指针变量的值为内存地址。通常变量直接包含特定值,而指针则是包含特定值变量的地址。指针变量的定义语句,由数据类型后跟星号,再跟随指针变量名组成。第一节指针的概念指针是用来存放地址的特殊类型变量,每一种基3内存单元由操作系统按字节编号,称为地址一个对象占有内存的第一个字节的地址称为对象的地址可以通过对象名或地址访问对象数据对象有两种访问形式——读和写操作5.1.1内存访问内存单元由操作系统按字节编号,称为地址5.1.1内存访4inta0X0066FDF4doubleb0X0066FDEC例如,有说明: inta; doubleb;内存分配inta0X0066FDF4doubleb5inta
0X0066FDF4doubleb0X0066FDEC内存分配变量a的地址例如,有说明: inta; doubleb;inta0X0066FDF4doubleb6inta
0X0066FDF4doubleb0X0066FDEC内存分配由类型符int解释存储数据例如,有说明: inta; doubleb;inta0X0066FDF4doubleb7例如,有说明: inta; doubleb;inta0X0066FDF4doubleb
0X0066FDEC内存分配变量b的地址例如,有说明:inta0X0066FDF4doub8例如,有说明: inta; doubleb;inta0X0066FDF4doubleb
0X0066FDEC内存分配由类型符double解释存储数据例如,有说明:inta0X0066FDF4doub9对于数据单元,名访问就是操作对象的内容访问形式分为“读”和“写”例如:inta,b;a=10;b=20;a=a+b;5.1.2名访问对于数据单元,名访问就是操作对象的内容例如:5.1.210对于数据单元,名访问就是操作对象的内容访问形式分为“读”和“写”例如:inta,b;a=10;b=20;a=a+b;intaintb建立内存对象对于数据单元,名访问就是操作对象的内容例如:intai11对于数据单元,名访问就是操作对象的内容访问形式分为“读”和“写”例如:inta,b;a=10;b=20;a=a+b;写操作intaintb1010对于数据单元,名访问就是操作对象的内容例如:写操作int12对于数据单元,名访问就是操作对象的内容访问形式分为“读”和“写”例如:inta,b;a=10;b=20;a=a+b;写操作intaintb102020对于数据单元,名访问就是操作对象的内容例如:写操作int13对于数据单元,名访问就是操作对象的内容访问形式分为“读”和“写”例如:inta,b;a=10;b=20;a=a+b;
读操作intaintb1020+2010对于数据单元,名访问就是操作对象的内容例如:读操作int14对于数据单元,名访问就是操作对象的内容访问形式分为“读”和“写”例如:inta,b;a=10;b=20;a=a+b;
写操作intaintb1020+201030对于数据单元,名访问就是操作对象的内容例如:写操作int15程序被编译后,系统对已声明对象保存一张名表,登记它们对象的属性<名字,类型,地址>C++允许通过名或地址(并根据类型)访问对象
例如,有说明: doubleb;<b,double,0X0066FDEC>名字b所标识的浮点型对象5.1.3地址访问程序被编译后,系统对已声明对象保存一张名表,登记它们对象的16程序被编译后,系统对已声明对象保存一张名表,登记它们对象的属性<名字,类型,地址>C++允许通过名或地址(并根据类型)访问对象
例如,有说明: doubleb;<b,double,0X0066FDEC>地址0X0066FDEC所指的浮点型对象程序被编译后,系统对已声明对象保存一张名表,登记它们对象的17
程序被编译后,系统对已声明对象保存一张名表,登记它们对象的属性<名字,类型,地址>
C++允许通过名或地址(并根据类型)访问对象
例如,有说明: doubleb;<a,int,0X0066FDF4>inta;<b,double,0X0066FDEC>名字a所标识的整型对象程序被编译后,系统对已声明对象保存一张名表,登记它们对象的18
程序被编译后,系统对已声明对象保存一张名表,登记它们对象的属性<名字,类型,地址>C++允许通过名或地址(并根据类型)访问对象
例如,有说明: doubleb;<a,int,0X0066FDF4>inta;<b,double,0X0066FDEC>地址0X0066FDF4所指的整型对象程序被编译后,系统对已声明对象保存一张名表,登记它们对象的19
程序被编译后,系统对已声明对象保存一张名表,登记它们对象的属性<名字,类型,地址>C++允许通过名或地址(并根据类型)访问对象
例如,有说明: doubleb;<a,int,0X0066FDF4><b,double,0X0066FDEC>取对象b的地址:
&b访问对象b: b
*(&b)取对象a的地址:
&a访问对象a: a
*(&a)取址运算符间址运算符程序被编译后,系统对已声明对象保存一张名表,登记它们对象的20例5-1测试对变量、常量的不同访问形式#include<iostream.h>voidmain(){inta=451;constintmax=1000;cout<<a<<endl; cout<<(&a)<<endl;cout<<*(&a)<<endl;
cout<<&max<<endl;cout<<max<<endl;cout<<*(&max)<<endl; }例5-1测试对变量、常量的不同访问形式#includ21例5-1测试对变量、常量的不同访问形式#include<iostream.h>voidmain(){inta=451;constintmax=1000;
cout<<a<<endl; cout<<(&a)<<endl;cout<<*(&a)<<endl;
cout<<&max<<endl;cout<<max<<endl;cout<<*(&max)<<endl ;}输出变量的值例5-1测试对变量、常量的不同访问形式#includ22例5-1测试对变量、常量的不同访问形式#include<iostream.h>voidmain(){inta=451;constintmax=1000;cout<<a<<endl;
cout<<(&a)<<endl;cout<<*(&a)<<endl;
cout<<&max<<endl;cout<<max<<endl;cout<<*(&max)<<endl; }输出变量的地址例5-1测试对变量、常量的不同访问形式#includ23例5-1测试对变量、常量的不同访问形式#include<iostream.h>voidmain(){inta=451;constintmax=1000;cout<<a<<endl; cout<<(&a)<<endl;
cout<<*(&a)<<endl;
cout<<&max<<endl;cout<<max<<endl;cout<<*(&max)<<endl; }输出变量的值例5-1测试对变量、常量的不同访问形式#includ24例5-1测试对变量、常量的不同访问形式#include<iostream.h>voidmain(){inta=451;constintmax=1000;cout<<a<<endl; cout<<(&a)<<endl;cout<<*(&a)<<endl;
cout<<&max<<endl;cout<<max<<endl;cout<<*(&max)<<endl; }输出常量的地址例5-1测试对变量、常量的不同访问形式#includ25例5-1测试对变量、常量的不同访问形式#include<iostream.h>voidmain(){inta=451;constintmax=1000;cout<<a<<endl; cout<<(&a)<<endl;cout<<*(&a)<<endl;
cout<<&max<<endl;
cout<<max<<endl;cout<<*(&max)<<endl; }输出常量的值例5-1测试对变量、常量的不同访问形式#include26例5-1测试对变量、常量的不同访问形式#include<iostream.h>voidmain(){inta=451;constintmax=1000;cout<<a<<endl; cout<<(&a)<<endl;cout<<*(&a)<<endl;
cout<<&max<<endl;cout<<max<<endl;
cout<<*(&max)<<endl;}输出常量的值例5-1测试对变量、常量的不同访问形式#includ27定义形式:
类型*标识符;指针类型变量——能够存放对象地址的变量,简称“指针变量”5.1.4指针变量与间址访问定义形式: 类型*标识符;指针类型变量——能够存28指针变量名
类型*标识符;定义形式:指针变量名 类型*标识符;定义形式:29指针类型说明符
类型*标识符;定义形式:指针类型说明符 类型*标识符;定义形式:30指针所指对象的类型(指针的关联)
类型*标识符;定义形式:指针所指对象的类型 类型*标识符;定义形式:31例如int*iptr;//iptr是指向整型对象的指针,可以存放一个整型变量的地址
char*s; //s是指向字符对象的指针double*dPtr; //dPtr是指向浮点对象的指针
类型*标识符;定义形式:例如 定义形式:32 一个*只能表示一个指针。int*ip,a;//a不是指针变量char*ip1,*ip2;定义形式: 一个*只能表示一个指针。int*ip,a;33 指向整型数的指针是包含该整型数地址的变量:int*ip;
指向字符的指针是包含该字符地址的变量:char*ip;
定义形式: 指向整型数的指针是包含该整型数地址的变量:int*ip34 指针是变量,需要赋值之后才能使用。&可以用来获取变量的地址,指针变量用于存放地址。int*ip;inta=20;ip=&a;0000:F822200000:F822ipa指针赋值 指针是变量,需要赋值之后才能使用。&可以用来获取变量的地址35 下列语句十分危险!#include<iostream.h>voidmain(){ int*p; *p=20;}???20???p指针赋值 下列语句十分危险!#include<iostream.36指针赋值inti=1;int*iPtr1,*iPtr2;char*cPtr;…iPtr1=&i; //合法iPtr2=iPtr1; //合法iPtr2=i;
//非法,i不是int*对象cPtr=iPtr1;
//非法,iPtr1不是char*对象i=iPtr1; //非法,iPtr1不是int对象指针赋值inti=1;37&取地址操作 *间址访问操作例如 inta=3,b=4; floatc=4.5,d=8.6; chare='x',f='y'; int*pa=&a,*pb=&b; float*pc=&c,*pd=&d; char*pe=&e,*pf=&f;abcdef100610101014101810221023344.58.6xy&取地址操作 例如 int*pa=&a,38abcdef100610101014101810221023344.58.6xypapbpcpdpepf2000200420082012201620202024100610101014101810221023&a3paa,*pa&b4pbb,*pb&c4.5pcc,*pc&d8.6pdd,*pd&expee,*pe&fypff,*pfabcdef10061010101410181022102339 每个指针都有一个类型(void*除外),指针是变量,因此它与其他基本数据类型一样,凡是可以声明变量的地方,都可以声明指针变量。它可以是全局、静态全局、静态局部和局部的。 每个指针都有一个类型(void*除外),指针是变量,因此它40 “*”放在可执行语句中的指针之前,称为间接引用操作符,可获得由该指针指向的变量的内容。“*”放在指针定义中,称为指针定义符。#include<iostream.h>voidmain(){ inta=20,*j; j=&a; cout<<j<<endl<<*j<<endl;}间接引用 “*”放在可执行语句中的指针之前,称为间接引用操作符,可获41 区别以下几个“*”表示的含义。#include<iostream.h>voidmain(){ int*p; inta=1*2; p=&a; *p=20; cout<<*p<<endl;}间接引用 区别以下几个“*”表示的含义。#include<iost42 辨析 intb=5; int*p=&b; *p=&b;间接引用 辨析 intb=5;间接引用43指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:
inta,b;int*p1,*p2;p1=&a;p2=&b;a=10;b=20;a=*p1+*p2;例:指针类型变量——能够存放对象地址的变量,简称“指针变量”i44指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;
int*p1,*p2;p1=&a;p2=&b;a=10;b=20;a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE0指针类型变量——能够存放对象地址的变量,简称“指针变量”i45指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;int*p1,*p2;p1=&a;p2=&b;a=10;b=20;a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE0指针类型变量——能够存放对象地址的变量,简称“指针变量”i46指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;int*p1,*p2;p1=&a;p2=&b;a=10;b=20;a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE00X0066FDF4指针类型变量——能够存放对象地址的变量,简称“指针变量”i47指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;int*p1,*p2;p1=&a;p2=&b;a=10;b=20;a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE00X0066FDF4*p1*p1指针p1所指的对象指针类型变量——能够存放对象地址的变量,简称“指针变量”i48指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;int*p1,*p2;p1=&a;
p2=&b;a=10;b=20;a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE00X0066FDF40X0066FDF0*p1指针类型变量——能够存放对象地址的变量,简称“指针变量”i49指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;int*p1,*p2;p1=&a;
p2=&b;a=10;b=20;a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE00X0066FDF4*p1*p2*p2指针p2所指的对象0X0066FDF0指针类型变量——能够存放对象地址的变量,简称“指针变量”i50指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;int*p1,*p2;p1=&a;p2=&b;a=10; //*p1=10b=20;a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE00X0066FDF40X0066FDF010*p1*p2指针类型变量——能够存放对象地址的变量,简称“指针变量”i51指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;int*p1,*p2;p1=&a;p2=&b;a=10;b=20; //*p2=20a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE00X0066FDF40X0066FDF010*p1*p220指针类型变量——能够存放对象地址的变量,简称“指针变量”i52指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;int*p1,*p2;p1=&a;p2=&b;a=10;b=20;
a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE00X0066FDF40X0066FDF010*p1*p220+指针类型变量——能够存放对象地址的变量,简称“指针变量”i53指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;int*p1,*p2;p1=&a;p2=&b;a=10;b=20;
a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE00X0066FDF40X0066FDF030*p1*p220+指针类型变量——能够存放对象地址的变量,简称“指针变量”i54指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;int*p1,*p2;p1=&a;p2=&b;a=10;b=20;a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE00X0066FDF40X0066FDF030*p1*p220间址访问读出变量p1的地址值查找该地址的存储单元读出数据指针类型变量——能够存放对象地址的变量,简称“指针变量”i55指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;int*p1,*p2;p1=&a;p2=&b;a=10;b=20;a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE00X0066FDF40X0066FDF030*p1*p220间址访问读出变量p1的地址值查找该地址的存储单元读出数据指针类型变量——能够存放对象地址的变量,简称“指针变量”i56指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;int*p1,*p2;p1=&a;p2=&b;a=10;b=20;a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE00X0066FDF40X0066FDF030*p1*p220间址运算(指针运算)指针类型变量——能够存放对象地址的变量,简称“指针变量”i57指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0例如:inta,b;int*p1,*p2;p1=&a;p2=&b;a=10;b=20;a=*p1+*p2;int*p20X0066FDE4int*p10X0066FDE00X0066FDF40X0066FDF030*p1*p220指针类型说明指针类型变量——能够存放对象地址的变量,简称“指针变量”i58指针类型变量——能够存放对象地址的变量,简称“指针变量”inta0X0066FDF4intb0X0066FDF0int*p20X0066FDE4int*p10X0066FDE00X0066FDF40X0066FDF030*p1*p220int*p1int*p2intaintb*p1*p2指针类型变量——能够存放对象地址的变量,简称“指针变量”i59//例5-3间址访问对象#include<iostream.h>voidmain(){inti,*p;p=&i;*p=5;cout<<i<<endl;cout<<*p<<endl;cout<<p<<endl;cout<<&i<<endl;}1.5.3指针变量与间址访问//例5-3间址访问对象1.5.3指针变量与间址访60//例5-3间址访问对象#include<iostream.h>voidmain(){inti,*p;
p=&i;*p=5;cout<<i<<endl;cout<<*p<<endl;cout<<p<<endl;cout<<&i<<endl;}1.5.3指针变量与间址访问//通过指针变量间址访问对象//例5-3间址访问对象1.5.3指针变量与间址访61//例5-3间址访问对象#include<iostream.h>voidmain(){inti,*p;p=&i;*p=5;
cout<<i<<endl;cout<<*p<<endl;cout<<p<<endl;cout<<&i<<endl;}用变量名访问对象1.5.3指针变量与间址访问//例5-3间址访问对象用变量名访问对象1.5.362//例5-3间址访问对象#include<iostream.h>voidmain(){inti,*p;p=&i;*p=5;cout<<i<<endl;
cout<<*p<<endl;cout<<p<<endl;cout<<&i<<endl;}通过指针变量间址访问对象1.5.3指针变量与间址访问//例5-3间址访问对象通过指针变量1.5.3指针63//例3间址访问对象#include<iostream.h>voidmain(){inti,*p;p=&i;*p=5;cout<<i<<endl;cout<<*p<<endl;
cout<<p<<endl;cout<<&i<<endl;}指针变量的值对象i的地址1.5.3指针变量与间址访问//例3间址访问对象指针变量的值1.5.3指针变量64//例3间址访问对象#include<iostream.h>voidmain(){inti,*p;p=&i;*p=5;cout<<i<<endl;cout<<*p<<endl;cout<<p<<endl;
cout<<&i<<endl;}取对象i的直接地址值//例3间址访问对象取对象i65//例3间址访问对象#include<iostream.h>voidmain(){inti,*p;p=&i;*p=5;cout<<i<<endl;cout<<*p<<endl;cout<<p<<endl;cout<<&i<<endl;
cout<<&p<<endl;}思考//例3间址访问对象思考66//例5-4交换指针值#include<iostream.h>voidmain(){inti1=10,i2=20,*p1,*p2,*p;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;p=p1;p1=p2;p2=p;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p110i1
p220i2
pinti1=10,i2=20,*p1,*p2,*p;//例5-4交换指针值p110i167//例5-4交换指针值#include<iostream.h>voidmain(){inti1=10,i2=20,*p1,*p2,*p;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;p=p1;p1=p2;p2=p;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p110i1
p220i2
pp1=&i1;p2=&i2;*p1*p2//例5-4交换指针值p110i168//例5-4交换指针值#include<iostream.h>voidmain(){inti1=10,i2=20,*p1,*p2,*p;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;p=p1;p1=p2;p2=p;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p110i1
p220i2
pcout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;*p1*p2Output*p1=10 *p2=20//例5-4交换指针值p110i169//例5-4交换指针值#include<iostream.h>voidmain(){inti1=10,i2=20,*p1,*p2,*p;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;p=p1;p1=p2;p2=p;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p110i1
p220i2
pp=p1;*p1*p2*pOutput*p1=10 *p2=20//例5-4交换指针值p110i170//例5-4交换指针值#include<iostream.h>voidmain(){inti1=10,i2=20,*p1,*p2,*p;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;p=p1;p1=p2;p2=p;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p110i1
p220i2
pp1=p2;*p1*p*p2Output*p1=10 *p2=20//例5-4交换指针值p110i171//例5-4交换指针值#include<iostream.h>voidmain(){inti1=10,i2=20,*p1,*p2,*p;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;p=p1;p1=p2;p2=p;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p110i1
p220i2
pp2=p;*p1*p*p2Output
*p1=10 *p2=20//例5-4交换指针值p110i172//例5-4交换指针值#include<iostream.h>voidmain(){inti1=10,i2=20,*p1,*p2,*p;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;p=p1;p1=p2;p2=p;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p110i1
p220i2
p*p1*p*p2cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;*p1=20 *p2=10Output
*p1=10 *p2=20//例5-4交换指针值p110i173//例5-5交换指针所指对象的值#include<iostream.h>voidmain(){inti1=10,i2=20,i,*p1,*p2;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;i=*p1;*p1=*p2;*p2=i;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p110i1
p220i2
iinti1=10,i2=20,i,*p1,*p2;//例5-5交换指针所指对象的值p11074//例5-5交换指针所指对象的值#include<iostream.h>voidmain(){inti1=10,i2=20,i,*p1,*p2;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;i=*p1;*p1=*p2;*p2=i;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p110i1
p220i2p1=&i1;p2=&i2;*p1*p2
i//例5-5交换指针所指对象的值p11075//例5-5交换指针所指对象的值#include<iostream.h>voidmain(){inti1=10,i2=20,i,*p1,*p2;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;i=*p1;*p1=*p2;*p2=i;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p110i1
p220i2cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;*p1*p2
iOutput*p1=10 *p2=20//例5-5交换指针所指对象的值p11076//例5-5交换指针所指对象的值#include<iostream.h>voidmain(){inti1=10,i2=20,i,*p1,*p2;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;i=*p1;*p1=*p2;*p2=i;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p110i1
p220i2i=*p1;*p1*p2
i10Output*p1=10 *p2=20//例5-5交换指针所指对象的值p11077//例5-5交换指针所指对象的值#include<iostream.h>voidmain(){inti1=10,i2=20,i,*p1,*p2;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;i=*p1;*p1=*p2;*p2=i;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p110i1
p220i2*p1=*p2;*p1*p210i20Output*p1=10 *p2=20//例5-5交换指针所指对象的值p11078//例5-5交换指针所指对象的值#include<iostream.h>voidmain(){inti1=10,i2=20,i,*p1,*p2;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;i=*p1;*p1=*p2;*p2=i;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p120i1
p220i2*p2=i;10i*p1*p210Output*p1=10 *p2=20//例5-5交换指针所指对象的值p12079//例5-5交换指针所指对象的值#include<iostream.h>voidmain(){inti1=10,i2=20,i,*p1,*p2;p1=&i1;p2=&i2;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;i=*p1;*p1=*p2;*p2=i;cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;}
p120i1
p210i2cout<<"*p1="<<*p1<<'\t'<<"*p2="<<*p2<<endl;*p1=20 *p2=1010i*p1*p2Output*p1=10 *p2=20//例5-5交换指针所指对象的值p12080例如int**p2;int*p1;inti=3;p1=&i;p2=&p1;5.1.5指向指针的指针
指针变量的地址、二级指针例如5.1.5指向指针的指针
指针变量的地址、二级指81例如
int**p2;int*p1;inti=3;p1=&i;p2=&p1;
p2指向指针的指针例如p2指向指针的指针82例如int**p2;
int*p1;inti=3;p1=&i;p2=&p1;
p2
p1指向指针的指针例如p2p183例如int**p2;int*p1;inti=3;p1=&i;p2=&p1;
p2
p13i指向指针的指针例如p2p184例如int**p2;int*p1;inti=3;
p1=&i;p2=&p1;
p2
p13i指向指针的指针&i*p1例如p2p185例如int**p2;int*p1;inti=3;p1=&i;
p2=&p1;
p2
p13i&i*p1指向指针的指针&p1*p2例如p2p186例如int**p2;int*p1;inti=3;p1=&i;p2=&p1;
p2
p13i&p1*p2&i*p1p2=&i;
//非法,p2必须取指针变量的地址cout<<*i;
//非法,i不是指针指向指针的指针例如p2p187//例5-6#include<iostream.h>voidmain(){int****p4,***p3,**p2,*p1,i=3;p4=&p3;p3=&p2;p2=&p1;p1=&i;cout<<****p4<<endl;}3i&ip1&p1p2&p2p3&p3p4指向指针的指针//例5-63i&i88例5-8指向指针的指针#include<iostream.h>voidmain(){ inticount=18; int*iptr=&icount; *iptr=58; int**p; p=&iptr; cout<<*iptr<<endl; cout<<icount<<endl; cout<<iptr<<endl; cout<<&icount<<endl; cout<<&iptr<<endl; cout<<p<<endl;}例5-8指向指针的指针#include<iostre89 void指针变量能够存放任意内存地址。因为没有关联类型,编译器无法解释所指对象,程序中必须对其作强制类型转换,才可以按指定类型数据使用5.1.6指针的类型转换 void指针变量能够存放任意内存地址。因为没有关联类型,90——指针类型的强制转换格式:(类型修饰符*)指针表达式 所有指针类型都可以赋给void指针而不需要类型转换,但是void指针不能直接赋给另一个类型的指针。——指针类型的强制转换91//例5-9#include<iostream.h>voidmain(){inta=65;int*ip;void*vp=&a;cout<<*(int*)vp<<endl;cout<<*(char*)vp<<endl;ip=(int*)vp;cout<<(*ip)<<endl;}指针的类型转换//例5-9指针的类型转换92//例5-9#include<iostream.h>voidmain(){inta=65;int*ip;
void*vp=&a;cout<<*(int*)vp<<endl;cout<<*(char*)vp<<endl;ip=(int*)vp;cout<<(*ip)<<endl;}定义无类型指针以整变量地址初始化指针的类型转换//例5-9定义无类型指针指针的类型转换93//例5-9#include<iostream.h>voidmain(){inta=65;int*ip;void*vp=&a;cout<<*(int*)vp<<endl;cout<<*(char*)vp<<endl;ip=(int*)vp;cout<<(*ip)<<endl;}强制类型转换后访问对象指针的类型转换//例5-9强制类型转换后指针的类型转换94//例5-9#include<iostream.h>voidmain(){inta=65;int*ip;void*vp=&a;cout<<*(int*)vp<<endl;cout<<*(char*)vp<<endl;ip=(int*)vp;cout<<(*ip)<<endl;}转换成字符型指针指针的类型转换1.5.3指针变量与间址访问//例5-9转换成字符型指针指针的类型转换1.5.3指95//例5-9#include<iostream.h>voidmain(){inta=65;int*ip;void*vp=&a;cout<<*(int*)vp<<endl;cout<<*(char*)vp<<endl;ip=(int*)vp;cout<<(*ip)<<endl;}向整型指针赋值指针的类型转换//例5-9向整型指针赋值指针的类型转换96//例5-9#include<iostream.h>voidmain(){inta=65;int*ip;void*vp=&a;cout<<*(int*)vp<<endl;cout<<*(char*)vp<<endl;ip=(int*)vp;cout<<(*ip)<<endl;}指针的类型转换1.5.3指针变量与间址访问//例5-9指针的类型转换1.5.3指针变量与间址访问97//例5-10#include<iostream.h>voidmain(){inta=321;//0x141int*ip;void*vp=&a;cout<<*(int*)vp<<endl;cout<<*(char*)vp<<endl;ip=(int*)vp;cout<<(*ip)<<endl;}1.5.3指针变量与间址访问//例5-101.5.3指针变量与间址访问98单步执行:#include<iostream.h>voidmain(){ cout<<"short:"<<sizeof(short)<<endl; shorti=259;//0000000100000011 //高位0x01,低位0x03 char*p=(char*)&i; cout<<int(*p)<<endl; p++; cout<<(*p)<<endl;}单步执行:#include<iostream.h>99 指针在使用中必须类型匹配。#include<iostream.h>voidmain(){ inticount=25; int*iptr=&icount; //*iptr=&icount; *iptr=50;} *iptr的类型是整型,&icount的类型是整型指针5.1.7指针类型的辨析 指针在使用中必须类型匹配。#include<iostr100 在32位机器中,整型和指针都是4个字节,内存的表示方式也都是二进制整数,但指针和整型数表示的是不同的类型。 指针和整型数可以进行强制类型转换。#include<iostream.h>voidmain(){ inticount=25; int*iptr=&icount; *iptr=(int)&icount;
cout<<*iptr;} 在32位机器中,整型和指针都是4个字节,内存的表示方式也都101第二节指针在数组中的运算指针只可以进行加减运算。数组名本身(不包括方括号和下标),它实际上是地址,表示数组起始地址。整型数组的数组名是一个整型地址,字符型数组的数组名是一个字符型地址。均可赋值给相应类型的指针。第二节指针在数组中的运算指针只可以进行加减运算。102——指针移动:移动n个单位格式: 指针变量+=n指针变量-=n移动的实际字节数=n*sizeof(指针关联的类型)5.2.1指针的基本操作——指针移动:移动n个单位5.2.1指针的基本操作103——指针移动:移动1个单位格式:++指针变量指针变量++--指针变量指针变量--执行intk,*pk=&k;cout<<endl<<++pk;cout<<endl<<pk;显示的是两个相同的地址——指针移动:移动1个单位104执行intk,*pk=&k;cout<<endl<<pk++;cout<<endl<<pk;显示的是两个不同的地址执行105指针的基本操作——正确理解下列组合操作的含义:*P++(*p)++*++p++*p指针的基本操作——正确理解下列组合操作的含义:106*p++:取p所指向单元的数据作为表达式的值,然后使p指向下一个单元;369pd初始状态:执行*p++后369pd(*p++的值:3)*p++:取p所指向单元的数据作为表达式的值,然后使107(*p)++:取p所指向单元的数据作为表达式的值,然后使该单元的数据值增1;369pd初始状态:执行(*p)++后469pd((*p)++的值:3)(*p)++:取p所指向单元的数据作为表达式的值,然后使该单108*++p:使p指向下一个单元,然后取该单元的数据作为表达式的值;369pd初始状态:执行*++p后369pd(*++p的值:6)*++p:使p指向下一个单元,然后取该单元的数据作为表达式的109++*p:将p所指向单元的数据增1并作为表达式的值;369pd初始状态:执行++*p后)469pd(++*p的值:4++*p:将p所指向单元的数据增1并作为表达式的369pd初110#include<iostream.h>voidmain(){ inta[4]={10,20,30,40}; int*p=a; cout<<*p++;cout<<endl<<(*p)++;cout<<endl<<*++p;cout<<endl<<++*p<<endl; cout<<endl; cout<<a[0]<<endl<<a[1]<<endl <<a[2]<<endl<<a[3]<<endl;}#include<iostream.h>111#include<iostream.h>voidmain(){ inta[10]; intsum=0; int*p=a;//intp=&a[0]; for(inti=0;i<10;i++) a[i]=2*i; for(i=0;i<10;i++) sum=sum+*p++; cout<<"sumis"<<sum<<endl;}举例:#include<iostream.h>举例:112#include<iostream.h>voidmain(){ inta[10]; intsum=0; int*p=a;//intp=&a[0]; for(inti=0;i<10;i++) a[i]=2*i; for(i=0;i<10;i++) sum=sum+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科技发展与学科教育的互促关系研究
- 科技教育编程教育的普及与推广
- DB4453T 30-2025广藿香组培苗生产技术规程
- DB35T 2232-2024海峡两岸共通 火龙果生产技术规程
- 东莞企业劳动合同范本
- 个人贷款房屋抵押合同模板大全
- 业务经营权转让合同
- 个人车位共有权买卖合同
- 临时仓储合同范本
- 两人股权转让合同范本
- 2024-2030年全球及中国水杨酸行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 体育馆改造装修工程施工组织设计
- 137案例黑色三分钟生死一瞬间事故案例文字版
- 【魔镜洞察】2024药食同源保健品滋补品行业分析报告
- 2024-2030年中国润滑油行业发展趋势与投资战略研究报告
- 钢结构工程施工(第五版) 课件 2项目四 高强度螺栓
- 机票预订行业营销策略方案
- 大学生就业指导(高等院校学生学习就业指导课程)全套教学课件
- 《实验诊断学》课件
- 眼的解剖结构与生理功能课件
- 小学网管的工作总结
评论
0/150
提交评论