A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangchao1992 中级黑马   /  2015-8-10 16:55  /  1323 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wangchao1992 于 2015-8-10 16:58 编辑

#include <stdio.h>

/**
*  不能交换
*/
void swap1(int a,int b){
    // 此函数是值传递
    //此处实质上是形参a和b值得交换,
    //跟实参没有关系
    int temp;
    temp = a;
    a = b;
    b = temp;

}

//怎么交换正确的交换两个变量的值
void swap2(int *p,int *p1){
     //此函数是地址传递
    //形参变量的地址进行的交换
    int *temp;
    temp = p;
    p = p1;
    p1 = temp;

}

//终级解决方案
void swap3(int *p,int *p1){
    //此函数是地址传递,
    //通过指针直接修改变量的值了
    int temp;
    temp = *p;
    *p = *p1;
    *p1 = temp;
   
}

int main(int argc, const char * argv[]) {
   
    int a = 4,b = 5;  // a = 5,b = 4
    printf("交换前:a = %d,b = %d\n",a,b);
    swap3(&a, &b);
    printf("交换后:a = %d,b = %d\n",a,b);
   
   
   
    return 0;
}

18 个回复

正序浏览
学习学习!
回复 使用道具 举报
wangchao1992 发表于 2015-8-10 22:13
你说的是两个数交换 , 有加减法,异或, 还有 利用变量

是的
回复 使用道具 举报

你说的是两个数交换 , 有加减法,异或, 还有 利用变量
回复 使用道具 举报
顶一下~~~
回复 使用道具 举报

a=a^b;b=a^b;
a=a^b;

回复 使用道具 举报
还可以用三次异或运算
回复 使用道具 举报
努力努力不放弃
回复 使用道具 举报

回复 使用道具 举报
飓风少年 发表于 2015-8-10 21:23
最后一种表示没见过。。。。

最后一种最重要
回复 使用道具 举报
多努力就会了啊
回复 使用道具 举报
最后一种表示没见过。。。。
回复 使用道具 举报

恩恩,一直都在努力
回复 使用道具 举报

{:2_36:} 菜鸟也要飞
回复 使用道具 举报
恩恩 很棒
回复 使用道具 举报
毕竟不是一个代码块,所以只有通过指针来直接对内存的修改。
回复 使用道具 举报

看多了就好了
回复 使用道具 举报
norwood 发表于 2015-8-10 17:35
恩只能通过指针来修改

{:3_59:}{:3_59:}{:3_59:}指针 好难
回复 使用道具 举报
恩只能通过指针来修改
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马