关于两个数交换

关于两个数交换

下面5个函数,哪个能成功交换两个数?

第一个函数

void swap1(int p, int q) {
    int temp = p;
    p = q;
    q = temp;
}

很明显不能交换两个数。尽管局部变量被交换了,但是随着局部变量生命周期的结束,不会影响主函数的a,b值。

第二个函数

void swap2(int *p, int *q) {
    int *temp;
    *temp = *p;
    *p = *q;
    *q = *temp;
}

不能交换,注意int *temp;新建了一个指针,但是没有给指针分配内存,也就是说指针现没有指向实际的地址。*temp = *p;是把*p指向内存里的值赋给*temp指向的内存中,这块内存由于是随机分配的,在函数结束后不会收回,容易造成内存泄漏。在有的编译器中,代码会报错。
比如,我在DevC++中测试就报错了。

第三个函数

void swap3(int *p, int *q) {
    int *temp;
    temp = p;
    p = q;
    q = temp;
}

这里的int *temp;也存在内存泄漏的问题。这个函数实现的功能是,局部变量指针的交换。在函数结束后,主函数的指针依旧指向原来的地址,所以不能实现交换。

第四个函数

void swap4(int *p, int *q) {
    int temp;
    temp = *p;
    *p = *q;
    *q = temp;
}

能交换,定义一个临时变量temp,temp存储的值是*p指向的内存中的值。然后交换*p指向内存的值和*q指向内存的值。之所以能实现两个数交换,是因为修改了指针所指向的地址中的值。

第五个函数

void swap5(int &p, int &q) {
    int temp;
    temp = p;
    p = q;
    q = temp;
}

swap5(a, b);

能交换,传递的是引用参数,与swap4类似。

这里写图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要用C语言实现两个数交换的冒泡排序法,可以按照以下步骤进行: 首先,定义两个变量num1和num2,并为其赋初始值。 然后,使用冒泡排序法进行交换。冒泡排序法的基本思想是通过不断比较相邻的两个元素,若顺序错误,则交换位置,直到整个序列有序。 具体实现可以使用嵌套循环,在外层循环中遍历整个序列,内层循环中通过比较相邻元素的大小并交换位置。这样,每次外层循环结束时,最大(或最小)的元素会被确定在合适的位置上。 最后,输出交换后的结果。 以下是使用C语言实现的代码示例: ```c #include <stdio.h> void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void bubbleSort(int *num1, int *num2) { if (*num1 > *num2) { swap(num1, num2); } } int main() { int num1 = 10; int num2 = 5; printf("交换前的结果:\n"); printf("num1 = %d, num2 = %d\n", num1, num2); bubbleSort(&num1, &num2); printf("交换后的结果:\n"); printf("num1 = %d, num2 = %d\n", num1, num2); return 0; } ``` 代码中的`swap`函数用于交换个数的值。`bubbleSort`函数则使用冒泡排序法对两个数进行交换,首先判断两个数的大小关系,若需要交换则调用`swap`函数进行交换。 在`main`函数中,定义了初始的两个数`num1`和`num2`,并输出交换前的结果。然后调用`bubbleSort`函数进行交换,最后输出交换后的结果。 运行代码,输出结果如下: ``` 交换前的结果: num1 = 10, num2 = 5 交换后的结果: num1 = 5, num2 = 10 ``` 可以看到,经过冒泡排序法进行交换后,`num1`和`num2`的值发生了互换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值