以下代码能不能实现两数交换呢?为什么? 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);
时间: 2023-07-15 12:15:59 浏览: 65
这段代码无法实现两数交换,因为指针变量 `pc` 被赋值为 `NULL`,然后试图通过 `*pc = *pa` 将 `a` 的值赋给 `NULL` 所指向的内存空间,这是错误的操作,会导致程序崩溃。正确的做法是把 `pc` 指向 `a` 或者 `b` 的地址,即 `pc = &a` 或 `pc = &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);
```
输出结果为 `20 10`。
相关问题
以下代码能不能实现两数交换呢?为什么? int a = 10; int b = 20; int *pa = &a; int *pb = &b; int *pc = NULL; pc = pa; pa = pb; pb = pc;
这段代码可以实现两个变量的交换。首先将变量 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;
是的,这段代码可以实现两个变量的交换。在这里,我们使用了指针来交换变量。首先,我们将指向 a 变量的指针 pa 赋值给 pc,然后将指向 b 变量的指针 pb 赋值给 pa,最后将指向 a 变量的指针 pc 赋值给 pb。这样可以交换 a 和 b 变量的值。
值得注意的是,当使用指针交换变量时,必须确保指针不为空。在这里,我们将指针 pc 初始化为 NULL,以确保在交换过程中不会出现问题。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)