清华大学出版社 TSINGHUA UNIVERSITY PRESS pointer_2=&b;/把变量b的地址赋 pointer 2* printf ("%d, %d\n",a, b); printf ("%d, %d \n" *pointer 1, *pointer 2) pointer 1 a k pointer 1 pointer 2 *k pointer__ 2
pointer_2=&b; /*把变量b的地址赋给 pointer_2 */ printf(″%d,%d\n″,a,b); printf(″%d,%d\n″,*pointer_1, *pointer_2); }
清华大学出版社 TSINGHUA UNIVERSITY PRESS 对“&”和“*”运算符说明: 如果已执行了语句 pointer1=&a; (1)&* pointer1的含义是什么?“&”和“*”两个 运算符的优先级别相同,但按自右而左方向结合, 因此先进行* pointer1的运算,它就是变量a,再 执行&运算。因此,&* pointer1与&a相同,即 变量a的地址。如果有 pointer2=&* pointer_1; 它的作用是将&a(a的地址)赋给 pointer2,如 果 pointer_2原来指向b,经过重新赋值后它已不再 指向b了,而指向了a
对“&”和“*”运算符说明: 如果已执行了语句 pointer_1=&a; (1)&* pointer_1的含义是什么?“&”和“*”两个 运算符的优先级别相同,但按自右而左方向结合, 因此先进行* pointer_1的运算,它就是变量a,再 执行&运算。因此,&* pointer_1与&a相同,即 变量a的地址。如果有pointer_2 =&* pointer_1 ; 它的作用是将&a(a的地址)赋给pointer_2 ,如 果pointer_2原来指向b,经过重新赋值后它已不再 指向b了,而指向了a
清华大学出版社 TSINGHUA UNIVERSITY PRESS pointer 1 pointer a pointer 2 pointer 2 8.b a a (b)
清华大学出版社 TSINGHUA VERSITY PRESS (2)*&a的含义是什么?先进行&a运算,得a的地 址,再进行*运算。即&a所指向的变量,也就是变量 a。*&a和* pointer1的作用是一样的,它们都等价 于变量a。即*&a与a等价 (3)(* pointer1)十十相当于a++。注意括号是必 要的,如果没有括号,就成为了* pointer_1++,从 附录可知:+和*为同一优先级别,而结合方向为自 右而左,因此它相当于* pointer_1++)。由于++在 pointer1的右侧,是“后加”,因此先对 pointer_1的 原值进行*运算,得到a的值,然后使 pointer1的值 改变,这样 pointer_1不再指向a了
(2) *&a的含义是什么?先进行&a运算,得a的地 址,再进行*运算。即&a所指向的变量,也就是变量 a。 *&a和*pointer_1的作用是一样的,它们都等价 于变量a。即*&a与a等价。 (3) (*pointer_1)++相当于a++。注意括号是必 要的,如果没有括号,就成为了*pointer_1++,从 附录可知:++和*为同一优先级别,而结合方向为自 右而左,因此它相当于*(pointer_1++)。由于++在 pointer_1的右侧,是“后加”,因此先对pointer_1的 原值进行*运算,得到a的值,然后使pointer_1的值 改变,这样pointer_1不再指向a了
例10.2输入a和b两个整数,按先大后小的顺序输出 a和b #include <stdio. h> void main o int* p1, p2, *p, a, b scanf ("%d, %d",&a,&b) p1=&a;p2=&b if(a< b) 1;p1=p2;p2=p; printf ("a=%d, b=%d\n\n"a, b) printf ("max=% d,min=%d\n"*p1, *p2);
例10 . 2 输入a和b两个整数,按先大后小的顺序输出 a和b。 #include <stdio.h> void 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(″a=%d,b=%d\n\n″,a,b); printf(″max=%d,min=%d\n″,*p1,*p2); }