F错例: main() 请问同学们: fint a=3, b=4; 错在何处? 冰1米 Int tp 2,*t: pI=&a; p2=&b 中间指针变 printf(%d,%dn,a, b) 量的使用: p 1:*D1=*p2 p p 2=*;给未知地址 printf( %od 27 odn. a 空间赋值。 上一页下一页 返回
上一页 下一页 返回 main( ) {int a=3, b=4; int *p1,*p2, *t; p1=&a; p2=&b; printf(“%d, %d\n”,a,b); *t=*p1; *p1=*p2; *p2=*t; printf(“%d, %d\n”,a,b); } 错例: 中间指针变 量的使用: 给未知地址 空间赋值。 请问同学们: 错在何处?
1023指针变量作为函数参数 令指针变量作为函数参数时,传递的是 变量的地址。 maint swap(int*p, int*q) fint a=3, b=4 int tem p int pl=&a, p2=&b temp printf("%/od, %d',pl, *p2) p-q> swap(pl, p2) q=temp printf(%d, %d\, *pl, *p2);3 输出:3.4 上一页下一页 返回
上一页 下一页 返回 10.2.3 指针变量作为函数参数 ❖ 指针变量作为函数参数时,传递的是 变量的地址。 main( ) {int a=3, b=4 ; int p1=&a, p2=&b; printf(“%d, %d\n”,*p1,*p2); swap(p1,p2); printf(“%d, %d\n”,*p1,*p2); } swap(int *p , int *q) {int temp; temp=*p; *p=*q; *q=temp; } 输出: 3, 4 4, 3
稍作改动:有何不同? main() swap(int *p, *q) fint a=3, b=4 int pl=&a, p2=&b printf(sco od%dn,pl, p2); swap(pl, p2) q=t; printf(%d, %d\n?,*pl,*p 2);j 输出:34 34 上一页下一页 返回
上一页 下一页 返回 稍作改动:有何不同? main( ) {int a=3, b=4 ; int p1=&a, p2=&b; printf(“%d, %d\n”,*p1,*p2); swap(p1,p2); printf(“%d, %d\n”,*p1,*p2); } swap(int *p , *q) {int *t; t = p; p = q; q = t; } 输出:3 4 3 4
结论 令形参与实参之间的数据传递(指针或普 通变量)是单向的值传递,实参中指针 的值并没有改变,变量a,b的值也没改变 上一页下一页 返回
上一页 下一页 返回 结论: ❖ 形参与实参之间的数据传递(指针或普 通变量)是单向的值传递,实参中指针 的值并没有改变,变量a,b的值也没改变
例:输入a,b,c三个整数,按从大到小顺序输出 令 swap(int“pt1,int*pt2) ☆intp; p=xpt1;¨ptl=“pt2;“pt2=p; g exchange (int *ql, int *q2, int*q3) i if ql <*q2)swap(ql, q2) if( *ql<*q3) swap(ql, g3); if(q2<*93)swap(q2, q3) printf(“ql=%d,q2=%d,q3=%dn”,q1,“q2,*q3); 上一页下一页 返回
上一页 下一页 返回 例: 输入 a, b, c三个整数,按从大到小顺序输出 ❖ swap(int *pt1, int *pt2) ❖ { ❖ int p; ❖ p=*pt1; *pt1=*pt2; *pt2=p; ❖ } ❖ exchange(int *q1, int *q2, int *q3) ❖ { if(*q1 < *q2) swap(q1, q2); ❖ if(*q1 < *q3) swap(q1, q3); ❖ if(*q2 < *q3) swap(q2, q3); ❖ printf(“*q1=%d,*q2=%d, *q3=%d\ n”,*q1, *q2, *q3); ❖ }