清华大学出版社 TSINGHUA UNIVERSITY PRESS 它的作用是将&a(a的地址)赋给pointer-.2,如果 pointer-2原来指向B,经过重新赋值后它已不再指 向B了,而也指向了a。见图10.6。图10.6(a)是原 来的情况,图10.6(B)是执行上述赋值语句后的情 况。 pointer_l pointer_l &a &.a pointer_2 pointer_2 b & 8&8 (a) (b) 图10.6
它的作用是将&a(a的地址)赋给pointer-2,如果 pointer-2原来指向B,经过重新赋值后它已不再指 向B了,而也指向了a。见图10.6。图10.6(a)是原 来的情况,图10.6(B)是执行上述赋值语句后的情 况。 图10.6
清华大学出版社 TSINGHUA UNIVERSITY PRESS (2)*&a的含义是什么?先进行&a运算,得a的地址, 再进行*运算。即&a所指向的变量,*&a和 *pointer-.1的作用是一样的(假设已执行了 pointer-1=&a”),它们等价于变量a。即*&a与a 等价,见图10.7。 pointer_] *pointer l &a *&a 图10.7
(2) *&a的含义是什么?先进行&a运算,得a的地址, 再进行*运算。即&a所指向的变量,*&a和 *pointer-1的作用是一样的(假设已执行了 “pointer-1=&a”),它们等价于变量a。即*&a与a 等价,见图10.7。 图10.7
清华大学出版社 TSINGHUA UNIVERSITY PRESS 3)(*pointer-1)++相当于a+。注意括号是必要的, 如果没有括号,就成为了*pointer-1+,和*为同 一优先级别,而结合方向为自右而左,因此它相 当于*(pointer-1++)。由于+在pointer-l的右侧, 是“后加”,因此先对pointer-1的原值进行*运算, 得到a的值,然后使pointer-1的值改变,这样 pointer-l不再指向a了。 下面举一个指针变量应用的例子。 例10.2输入a和B两个整数,按先大后小的顺序输出a 和B
(3) (*pointer-1)++相当于a++。注意括号是必要的, 如果没有括号,就成为了*pointer-1++,和*为同 一优先级别,而结合方向为自右而左,因此它相 当于*(pointer-1++)。由于++在pointer-1的右侧, 是“后加”,因此先对pointer-1的原值进行*运算, 得到a的值,然后使pointer-1的值改变,这样 pointer-1不再指向a了。 下面举一个指针变量应用的例子。 例10.2输入a和B两个整数,按先大后小的顺序输出a 和B
清华大学出版社 TSINGHUA UNIVERSITY PRESS mainO int*p1,*p2,*p,a,B; scanf("%D,%D",&a,&B); p1=&a;p2=&B; if(a<B) (p=p1;p1=p2;p2=p;} printf("\na=%D,B=%DIn\n",a,B); printf("max=%D,min=%D\n",*p1, *p2);
main() { int*p1, *p2, *p,a,B; scanf("%D,%D",&a,&B); p1=&a;p2=&B; if(a<B) {p=p1;p1=p2;p2=p;} printf("\na=%D,B=%D\n\n",a,B); printf("max=%D,min=%D\n", *p1, *p2); }
清华大学出版社 TSINGHUA UNIVERSITY PRESS 运行情况如下: 5,9 a=5,B=9 max=9,min=5 当输入a=5,B=9时,由于a<B,将p1和p2交换。交换前的 情况见图10.8(a),交换后见图10.8(B)。 pl &b p2 p2 &b 8.a (a) (b) 图10.8
运行情况如下: 5,9 a=5,B=9 max=9,min=5 当输入a=5,B=9时,由于a<B,将p1和p2交换。交换前的 情况见图10.8(a),交换后见图10.8(B)。 图10.8