c语言,用指针交换函数的值

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;
}

这样可以吗?