#include<stdio.h>
void fun(int *a,int *b,int *c)
{
int *t;
t=a;a=b;b=t;
*t=*b;*b=*c;*c=*t;
printf("%d%d%d\n",*a,*b,*c);
}
int main()
{
int a=5,b=7,c=3;
int *p1=&a,*p2=&b,*p3=&c;
fun(p1,p2,p3);
printf("%d%d%d",a,b,c);
}
解答如下:
注:解答中使用的形如a->a=5的语句,翻译为:指针a指向整型变量a,整型变量a=5
文字版如下:
#include<stdio.h>
void fun(int *a, int *b, int *c)
{
//此处形参a,b,c就相当于指针p1,p2,p3
int *t;//⑤定义了一个指针变量t
t = a; a = b; b = t;//⑥另说
*t = *b; *b = *c; *c = *t;//⑦另说
printf("%d%d%d\n", *a, *b, *c);//⑧分别输出指针a,b,c所对应的值:7,3,3
//⑨fun执行结束,转到main函数
}
int main()
{
//①程序从main函数开始执行
int a = 5, b = 7, c = 3;//②定义了三个整型变量a,b,c并分别赋值5,7,3
int *p1 = &a, *p2 = &b, *p3 = &c;//③定义了三个指针p1,p2,p3分别指向变量a,b,c
fun(p1, p2, p3);//④将p1,p2,p3作为实参传入函数fun,转到fun执行
printf("%d%d%d", a, b, c);//⑩输出a,b,c的值,3,7,3
}
/*
⑤a->a=5 b->b=7 c->c=3 t
⑥t->a=5 a->b=7 b->a=5 c->c=3此时*t=5,*a=7,*b=5,*c=3
⑦*t=*b执行后*t=5,*b=*c执行完后*b=3(注意此时指针b是指向整型变量a的,*b=3时就将整型变量a的值更改为了3,即a=3)
执行*c=*t后*c=3(由⑥可知t和b同时指向a,而a已经变为了3,所以*t也为3)
至此:*a=7,*b=3,*c=3,而整型变量a=3,b=7,c=3
*/
#include<stdio.h>
void fun(int *a,int *b,int *c)
{
int *t;
t=a; // *t = 5;
a=b; // *a = 7
b=t; // *b = 5, b, t指向同一个地址初识a的地址
*t=*b; // *t = *b = 5
*b=*c; // *b = 3, 因为b, t 指向同一个地址所以*t = 3
*c=*t; // *c = 3
printf("%d%d%d\n",*a,*b,*c); // *a = 7; *b = 3; *c=3
}