&和“*“运算符:优先级相同,结合性为自右向左 例:若int*p1,*p2,a=5,b,c; 则下列语句的含义是: p1=&a //&*p1代表a的地址(&a或p1) b=(*p1)+;//相当于a++ p2=&*1;、它的作用是使p2指向a c=*&a 在价 若写成*p1++作用就不一样了,因为++和米为 同一优先级,且都为右结合性,因此它相当于 *(p1+),因此先对p1的原值进行*运算,得到a的 值,然后使p1的值改变,这样p1不再指向a了 C++程序设计课件设计制作:徐龙琴
C++程序设计课件 设计制作:徐龙琴 11 “&“和“*“运算符:优先级相同,结合性为自右向左 //&*p1代表a的地址(&a或p1). //它的作用是使p2指向a 例: 若int *p1, *p2 ,a=5,b,c; 则下列语句的含义是: p1=&a; b=(*p1)++; p2=&*p1; c=*&a; //*&a与a等价 //相当于a++ 若写成*p1++作用就不一样了,因为++和*为 同一优先级,且都为右结合性,因此它相当于 *(p1++),因此先对p1的原值进行*运算,得到a的 值,然后使p1的值改变,这样p1不再指向a了
例:指针变量的引用运行该程序将得到如下结果 #include <iostream.h> i1=600i2=800 void maino i1=300i2=400 { int il=6002=800: i1=301i2=400 int*pl, " p2 i1=400i2=400 pl=&il, p2=&i2; ∥使p1指向,p2指向i2 cout<"il="<pl<<""<<"i2=<<*p2<<endl; 2pl=300,p2=400 ∥作用相当于i1-=300,i2=400 cout<<"il="<<pl<<""<<"i2="<<p2<endl; p1=*pl+l; 相当于1-1+1; cout<<"il="<<pl<<""<<"i2="<<p2<endl; pipi ∥(使p1指向p2所指向的目标i2 cout<<"il="<<p1<""<<"i2="<<p2<<endl;} C++程序设计课件设计制作:徐龙琴 12
C++程序设计课件 设计制作:徐龙琴 12 例:指针变量的引用 #include <iostream.h> void main() { int i1=600,i2=800; int *p1,*p2; p1=&i1,p2=&i2; //使p1指向i1,p2指向i2 cout<<"i1="<<*p1<<" "<<"i2="<<*p2<<endl; *p1=300,*p2=400; //作用相当于i1=300,i2=400 cout<<"i1="<<*p1<<" "<<"i2="<<*p2<<endl; *p1=*p1+1; //相当于i1=i1+1; cout<<"i1="<<*p1<<" "<<"i2="<<*p2<<endl; p1=p2; //使p1指向p2所指向的目标i2 cout<<"i1="<<*p1<<" "<<"i2="<<*p2<<endl; } 运行该程序将得到如下结果: i1=600 i2=800 i1=300 i2=400 i1=301 i2=400 i1=400 i2=400
例:通过指针变量访问整型变量 include <stdio.h> void main( {inta=100,b=10: int*pl,*p2;/定义指针变量p1和p2 pl=&a;p2=&b;/使p1指向a,p2指向b*/ printf(“%od,%dⅦn”,a,b); printf("%od,%dim”,p1l,*p2);/输出a、b的值* 运行结果为:10,10 100,10 C++程序设计课件设计制作:徐龙琴 13
C++程序设计课件 设计制作:徐龙琴 13 例:通过指针变量访问整型变量 运行结果为:100, 10 100, 10 #include <stdio.h> void main( ) { int a=100, b=10; int *p1, *p2; /* 定义指针变量p1和p2 */ p1=&a; p2=&b; /* 使p1指向a,p2指向b */ printf(“%d, %d\n”,a,b); printf(“%d, %d\n”,*p1,*p2); /*输出a、b的值*/ }
例:输入a和b两个整数,按先大后小的顺序输出a和b #include <stdio.h> void main( Rint*pl, *p2, *p, a, b scanf(%d, %od", &a, &b); pl=&a;p2=&b;/先使pl指向a,p2指向b*/ if(a<b) {p=pl;pl=p2;p2=p;}/使p1和p2改变指向,使pl指向b,p2指向a printf(\na=%d, b=%,,a, b); 运行结果: printf(“max=%d,min=%dn”,*pl,*p2);6080 6080 8060 C++程序设计课件设计制作:徐龙琴
C++程序设计课件 设计制作:徐龙琴 14 例:输入a和b两个整数,按先大后小的顺序输出a和b #include <stdio.h> void main( ) {int *p1, *p2, *p, a, b; scanf(“%d,%d”,&a, &b); p1=&a; p2=&b; /* 先使p1指向a,p2指向b */ if(a<b) {p=p1;p1=p2;p2=p;} //使p1和p2改变指向,使p1指向b,p2指向a printf(“\na=%d,b=%d\n\n”,a,b); printf(“max=%d,min=%d\n”,*p1,*p2); } 运行结果: 60 80 60 80 80 60
4指针运算(其实质为地址运算) (1)算术运算 ①指针与整数的加减运算:其结果仍然是一个地址,它是以 该指针为基点的前方或后方第n 个数据的地址 ②指针自加,自减(p++,p-):自加是指向下一个数据, 自减是指向上一个数据 ③同类型的指针相减:得出它们所指向的地址之间包含的 数据的个数 C++程序设计课件设计制作:徐龙琴
C++程序设计课件 设计制作:徐龙琴 15 ⒋指针运算(其实质为地址运算): ① 指针与整数的加减运算:其结果仍然是一个地址,它是以 该指针为基点的前方或后方第n 个数据的地址 ⑴算术运算: ②指针自加,自减(p++,p--):自加是指向下一个数据, 自减是指向上一个数据 ③同类型的指针相减:得出它们所指向的地址之间包含的 数据的个数