可以帮我解释这个程序的指针是怎么用的吗,为什么变量换来换去的☹️

#include
void swap(int *p1,int *p2)
{
int t;
t=*p1;
*p1=p2;
p2=t;
}
int main(void)

int a =1,b=2,
a1,
b1;
a1=&a;
b1=&b;
swap(a1,b1);
printf(“%d%d",a,b);
return 0;
}

这很简单啊,就是实现p1指向的值和p2指向的值进行交换,所以需要换来换去
t = *p1 就是将p1指针指向的值复制到临时变量t
然后 * p1 = * p2是将p2指向的值复制给p1指向的值
最后 * p2 = t是将临时变量t的值赋值给p2指向的值

看输出结果不就知道了

望采纳


指针是一种特殊的变量类型,它指向内存中的另一个变量。在这个程序中,函数swap接收两个指针参数p1和p2,然后交换它们指向的变量的值。


错误的地方在于,在交换变量的值的时候,它把指针变量p1的值(即内存地址)赋值给了指针变量p2,然后把指针变量p2的值(即原来的变量t)赋值给了指针变量p1,这是错误的。应该用下面的代码来交换变量的值:

void swap(int *p1, int *p2) {
    int t;
    t = *p1;
    *p1 = *p2;
    *p2 = t;
}

另外,在主函数中,指针变量a1和b1的定义应该写成这样:

int a = 1, b = 2, *a1, *b1;
a1 = &a;
b1 = &b;

在定义指针变量时,应该用*来声明指针变量,而不是用&来获取指针变量的值。

修改后的程序如下:

#include <stdio.h>

void swap(int *p1, int *p2) {
    int t;
    t = *p1;
    *p1 = *p2;
    *p2 = t;
}

int main(void) {
    int a = 1, b = 2, *a1, *b1;
    a1 = &a;
    b1 = &b;
    swap(a1, b1);
    printf("%d%d", a, b);
    return 0;
}