例1: 第10章指针 main() tint a, pa: 单击跟标,演示程序的 float b, *pb 执行过程: a=10 pa b=1.5 &a 10 pa=&a; pb pb=&b &b 1.5 printf( %d, %f\n", a, b) printf( %d, %f\n",*pa, * pb);
第10章 指针 11 例1: main( ) {int a,*pa; float b,*pb; a=10; b=1.5; pa=&a; pb=&b; printf("%d,%f\n”,a,b); printf("%d,%f\n”,*pa,*pb); } 单击鼠标,演示程序的 执行过程: pa pb a b &a &b 1.5 10
第10章指针 说明:“8”和“*”两个运算符的优先级 相同,但按自右向左方向结合 执行了pa=&a;后,&*pa的含义? ·与&a相同。 &a的含义?即a,*pa (pa)++相当于a++ patt 相当于*(pa++即先取*pa,即a的原 值,之后pa自增,不再指向a了。 12
第10章 指针 12 说明:“&”和“*”两个运算符的优先级 相同,但按自右向左方向结合 –执行了pa=&a;后,&*pa的含义? • 与&a相同。 – *&a的含义? 即a, *pa。 – (*pa)++相当于 a++ – *pa++ • 相当于*(pa++),即先取*pa,即a的原 值,之后pa自增,不再指向a了
第10章指针 例2:指针变量应用的例子, 由大到小输出a,b main( 单击鼠标,演示程序的执 行过程: dint a, b, *p, *pa, *pb a=3;b=6; a a pa=&a; pb=&b; &b 3 if(a<b) pb Ip=pa; pa=pb; pb=p;) &a 6 printf("%d%dIn",a, b; printf( d%dIn", *pa, pb) &a 13
第10章 指针 13 例2:指针变量应用的例子, 由大到小输出a,b。 main() {int a,b,*p,*pa,*pb; a=3;b=6; pa=&a; pb=&b; if(a<b) { p=pa; pa=pb; pb=p;} printf("%d%d\n",a,b); printf("%d%d\n",*pa,*pb); } 单击鼠标,演示程序的执 行过程: pa pb p a b &a &b 6 3 &a &b &a
第二指针与变量 第10章指针 三、指针变量作为函数的参数 所数的参数也可以是指针类型,实际参数可 以是地址常量或指针变量,形式参数则为指 针变量。这种传递也是值传递,即将实参指 针变量的值传给对应的形参。但是由于指针 变量存放的是地址值,作为函数的参数来进 行传送的是实参的值一-一变量的地址
第10章 指针 14 第二节 指针与变量 三、指针变量作为函数的参数 函数的参数也可以是指针类型,实际参数可 以是地址常量或指针变量,形式参数则为指 针变量。这种传递也是值传递,即将实参指 针变量的值传给对应的形参。但是由于指针 变量存放的是地址值,作为函数的参数来进 行传送的是实参的值-- --变量的地址
第二指针与变量 第10章指针 例3:用函数来实现两个数由大到小顺序输出 void swap(int *p1, int*p2) pa a tint temp temp=*p1; *p1=*p2, &a 6 *p2=temp: y main( &a 3 tint a, b; int *pa,*pb pb tem scanf( %d, %d", &a, &b; &b 3 pa=&a; pb=&b 2 if(asb) swap(pa, pb) printf(" %d, %dIn", a, b) &b printf( %d, /dn",*pa, *pb):] 15
第10章 指针 15 p1 pb a &a 6 3 &b &a pa b p2 &b temp 3 6 3 void swap(int *p1, int *p2) {int temp; temp=*p1; *p1=*p2; *p2=temp; } main( ) {int a,b; int *pa,*pb; scanf("%d,%d",&a,&b); pa=&a; pb=&b; if(a<b) swap(pa,pb); printf("%d,%d\n",a,b); printf("%d,%d\n",*pa,*pb);} 第二节 指针与变量 例3: 用函数来实现两个数由大到小顺序输出