void f1(int *b,int *c)
{
int t;
t=*b;
*b=*c;
*c=t;
}
我不太理解为什么需要t=b
函数一开始定义了一个指针变量b和c
存放的是对应的变量的地址
在交换值的时候,如果有不就变成交换值了吗?求解
这个交换两个值的意思,比如你要交换两个东西,每次只能做一个操作,那么你就需要一个载体,这个载体就是t,先将b指针指向的值取出来b赋值给t,然后同样的将c赋值给b,再把t赋值给c,就完成交换了,
注意这里b和c是指针,b和c是值
#include <stdio.h>
void swap(int *a, int *b)
{
/*
* 此函数中:
* a和b是指向两个int类型的指针,
* 它们接受了main里面a和b的地址,
* 即:
* a = &a (in main());
* b = &b (in main());
* 所以对*a实际上就是对a(in main())操作
*/
printf("---swap:(a, b) = (%p, %p)\n", a, b);
printf("---swap:(&a, &b) = (%p, %p)\n", &a, &b);
printf("---swap:(*a, *b) = (%d, %d)\n", *a, *b);
int temp = *a;
*a = *b;
*b = temp;
printf("------------SWAPED------------\n");
printf("---swap:(a, b) = (%p, %p)\n", a, b);
printf("---swap:(&a, &b) = (%p, %p)\n", &a, &b);
printf("---swap:(*a, *b) = (%d, %d)\n", *a, *b);
}
int main()
{
int a=4, b=5;
printf("main:(&a, &b) = (%p, %p)\n", &a, &b);
printf("------------------------------\n");
swap(&a, &b);
printf("------------------------------\n");
printf("main:(&a, &b) = (%p, %p)\n", &a, &b);
printf("\n");
printf("a = %d, b = %d\n", a, b);
return 0;
}
这样可以吗?