如果已经执行了语句 pointer_1=&a;
(1)&*pointer_1 的含义是什么?
"&" 和 "*" 两个运算符的优先级相同, 但按自右向左方向结合, 因此先进行 * pointer_1 的运算, 再执行 & 运算.
因此,&*pointer_1 与 & a 相同, 即变量 a 的地址.
如果有: pointer_2=&*pointer_1;
它的作用是将 & a(a 的地址) 赋给 pointer_2.
(2)*&a 的含义是什么?
先进行 & a 运算, 得 a 的地址, 在进行 * 运算, 即 & a 所指向的变量, 即变量 a.
*&a 和 * pointer_1 的作用是一样的, 他们都等价于变量 a, 即 *&a 与 a 等价.
(3)(*pointer_1)++ 相当于 a++;
注: 括号是必要的, 如果没有括号, 就变成了 * pointer_1++, 由运算符的优先级与结合方向可知, 它相当于 *(pointer_1++).
例: 输入 a 和 b 两个整数, 按先大后小的顺序输出 a 和 b.
- #include <stdafx.h>
- #include<stdio.h>
- void main()
- {
- int a,b,*p1,*p2,*p;
- scanf("%d%d\n",&a,&b);
- p1=&a;
- p2=&b;
- if(a<b)
- {
- p=p1;
- p1=p2;
- p2=p;
- }
- printf("a=%d.b=%d\n",a,b);
- printf("max=%d,min=%d\n",*p1,*p2);
- }
例: 对输入的两个整数按大小顺序输出, 这次用函数实现交换功能.
- #include <stdafx.h>
- #include<stdio.h>
- void swap(int*p1,int*p2);
- void main()
- {
- int a,b;
- int*pointer_1,*pointer_2;
- scanf("%d%d",&a,&b);
- pointer_1=&a;
- pointer_2=&b;
- if(a<b)
- {
- swap(pointer_1,pointer_2);
- }
- printf("\n%d>%d\n",a,b);
- }
- void swap(int*p1,int*p2)
- {
- int temp;
- printf("swapping");
- temp=*p1; //temp=a;
- *p1=*p2; //a=b;
- *p2=temp; //b=temp;
- }
例: 输入 a,b,c 三个整数, 按大小顺序输出.
- #include <stdafx.h>
- #include<stdio.h>
- void swap(int*pt1,int*pt2);
- void exchange(int *q1,int *q2,int *q3);
- void main()
- {
- int a,b,c,*p1,*p2,*p3;
- scanf("%d%d%d",&a,&b,&c);
- p1=&a;
- p2=&b;
- p3=&c;
- exchange(p1,p2,p3);
- printf("%d,%d,%d\n",a,b,c);
- }
- void 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);
- }
- }
- void swap(int*pt1,int*pt2)
- {
- int temp;
- printf("swapping");
- temp=*pt1; //temp=a;
- *pt1=*pt2; //a=b;
- *pt2=temp; //b=temp;
- }
来源: http://www.bubuko.com/infodetail-2945751.html