清华大学出版社 TSINGHUA UNIVERSITY PRESS pointer2=&b;泮把变量b的地址赋给 pointer 2 printf ("%d, %d\n",a, b); printf ("%d, %d\n"* pointer 1, *pointer 2); pointer a a * k pointer 1 pointer 2 * pointer 2 C程序设计(第三版) http://ccf.tsinghua.edu.cn
C程序设计(第三版) http://ccf.tsinghua.edu.cn 11 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)&* pointer_1的含义是什么? “&”和“*”两个运算符的优先级别相同,但 按自右而左方向结合。因此,&* pointer1与&a相 同,即变量a的地址。 如果有 pointer2=&* pointer_1:它的作用是将 &a(a的地址)赋给 pointer2,如果 pointer_2原来 指向b,经过重新赋值后它已不再指向b了,而指向 C程序设计(第三版) http://ccf.tsinghua.edu.cn 12
C程序设计(第三版) http://ccf.tsinghua.edu.cn 12 对“&”和“*”运算符说明: 如果已执行了语句 pointer_1=&a; (1)&* pointer_1的含义是什么? “&”和“*”两个运算符的优先级别相同,但 按自右而左方向结合。因此,&* 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) C程序设计(第三版) http://ccf.tsinghua.edu.cn 13
C程序设计(第三版) http://ccf.tsinghua.edu.cn 13
清华大学出版社 TSINGHUA UNIVERSITY PRESS (2)*&a的含义是什么? 先进行&a运算,得a的地址,再进行*运算。* &a和* pointer_1的作用是一样的,它们都等价于变 量a。即*&a与a等价。 (3)( pointer_1)十+相当于a++。 C程序设计(第三版) http://ccf.tsinghua.edu.cn 14
C程序设计(第三版) http://ccf.tsinghua.edu.cn 14 (2) *&a的含义是什么? 先进行&a运算,得a的地址,再进行*运算。* &a和*pointer_1的作用是一样的,它们都等价于变 量a。即*&a与a等价。 (3) (*pointer_1)++相当于a++
例10.2输入a和b两个整数,按先大后小的顺序输出 a和b。 #include <stdio.h> void main ( i int pl, * 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 b) printf ("max=% d ,min=%d\n"*p1, *p2); f「c程序设计(第三版) http://ccf.tsinghua.edu.cn 15
C程序设计(第三版) http://ccf.tsinghua.edu.cn 15 例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); }