以下代码能不能实现两数交换呢?为什么? int a = 10; int b = 20; int *pa = &a; int *pb = &b; int *pc = NULL; pc = pa; pa = pb; pb = pc;
时间: 2023-12-03 13:05:53 浏览: 97
这段代码可以实现两个变量的交换。首先将变量 a 的地址赋值给指针 pa,将变量 b 的地址赋值给指针 pb。然后将指针 pa 的值(也就是变量 a 的地址)赋值给指针 pc,再将指针 pb 的值(也就是变量 b 的地址)赋值给指针 pa,最后将指针 pc 的值(也就是变量 a 的地址)赋值给指针 pb。这样就完成了变量 a 和变量 b 的交换。
相关问题
以下代码为什么不能实现两数交换 int a = 10; int b = 20; int *pa = &a; int *pb = &b; int *pc = NULL; pc = pa; pa = pb; pb = pc; printf("%d %d\n", a, b);
这段代码不能实现两数交换的原因是因为在交换指针时,只是交换了指针变量的值,而没有交换指针所指向的变量的值。
具体来说,执行 `pc = pa;` 后,pc 指向了 a 的地址;然后执行 `pa = pb;` 后,pa 指向了 b 的地址;最后执行 `pb = pc;` 后,pb 指向了 a 的地址。这时候 a、b 的值没有发生改变,所以输出的结果还是原来的 10 和 20。
要实现两个数的交换,可以使用一个中间变量来保存一个数的值,然后再将两个变量的值进行互换,例如:
```
int a = 10;
int b = 20;
int temp = a;
a = b;
b = temp;
printf("%d %d\n", a, b);
```
输出结果为:`20 10`。
/* experiment 9-1 */ #include<stdio.h> void main(void) { int a=10; int b=20; int *pa,*pb,*t=NULL; pa = &a; pb = &b; printf("交换前:a=%d b=%d\n",a,b); *t = *pa; *pa = *pb; *pb = *t; printf("交换后:a=%d b=%d\n",a,b); }哪里错了
实实验实验9实验9-实验9-1实验9-1是实验9-1是什实验9-1是什么实验9-1是什么?实验9-1是什么?请实验9-1是什么?请提实验9-1是什么?请提供实验9-1是什么?请提供更实验9-1是什么?请提供更多实验9-1是什么?请提供更多上实验9-1是什么?请提供更多上下实验9-1是什么?请提供更多上下文实验9-1是什么?请提供更多上下文信息实验9-1是什么?请提供更多上下文信息。
阅读全文