关于&和*运算符的进一步说明: *、&:优先级同为2级, 令结合性:从右向左 1.若已定义且执行: 2 nt a,b,t pl,t p 令pl=&a;p2=&b;,a=100;b=10: ① &*pl<>&a<>p &*p2<)&b>p2 ②若p2=&*pl<>p2=&a 上一页下一页 返回
上一页 下一页 返回 关于 & 和 * 运算符的进一步说明: ❖ * 、&:优先级同为2级, ❖ 结合性:从右向左。 ❖ 1.若已定义且执行: ❖ int a, b, * p1, * p2; ❖ p1=&a; p2=&b; a=100; b=10; ❖ 则 ❖ ① &* p1 &a p1; ❖ &* p2 &b p2 ❖ ②若p2=&* p1 p2=&a
关于&和*运算符的进一步说明: 2.*&a:先进行&a得a的地址,再对a的 地址进行*运算:即指向a地址所指向的 变量,也就是a,其值是100 ☆3运算符*,++:优先级为2,结合性:从右 到左 (*p1)++→>a+ 令*p1++)*(p1++) 令意即将p1所指向的对象a的值取出,然后使pl 自增,pl原指向a,现在可能指向下一个变量了 上一页下一页 返回
上一页 下一页 返回 关于 & 和 * 运算符的进一步说明: ❖ 2. * & a: 先进行&a得a的地址, 再对a的 地址进行* 运算: 即指向a地址所指向的 变量,也就是a, 其值是100 ❖ 3.运算符 * , ++ :优先级为2, 结合性:从右 到左 ❖ (* p1)++ → a++ ❖ * p1++ → * (p1++) ❖意即:将p1所指向的对象 a 的值取出, 然后使 p1 自增, p1原指向a , 现在可能指向下一个变量了
例: mal 输出结果: int a p a=5, p=ii4 a=5,p=&a printf( a=%d, p=%oxn,, a, p) a=5,p=i6 printf(a=%d\n??,*p++) printf( a=%d, p=%xn,, a, p) 上一页下一页 返回
上一页 下一页 返回 main( ) {int a , *p; a=5; p=&a; printf(“a=%d , p=%x\n”,a , p); printf(“a=%d\n”, *p++); printf(“a=%d , p=%x\n”,a , p); } 例: 输出结果: a=5, p=fff4 a=5 a=5, p=fff6
例:指针交换指向 main() a fint a=3, b=4 b4 In t*pl * p2 p p pI=&a; p2=&b printf(%od, %d,, a, b) p1*p1=*p2;*p2=一a4b3 printf( odn,,a, b ) 上一页下一页 返回
上一页 下一页 返回 例:指针交换指向 main( ) {int a=3, b=4,t ; int *p1,*p2; p1=&a; p2=&b; printf(“%d, %d\n”,a,b); t=*p1; *p1=*p2; *p2=t; printf(“%d, %d\n”,a,b); } a 3 b 4 p1 p2 a 4 b 3
H稍作改动:改变中间变量有何不同? main() a fint a=3, b=4 int pl, p2, t 2 l=&a;p2=&b printf("o/od, %odn, a, b) tpl;pl→p2;p2气t; a3 4 printf( %od,9dn”a,b) 上一页下一页 返回
上一页 下一页 返回 稍作改动:改变中间变量,有何不同? 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); } a 3 b 4 p1 p2 a 3 b 4