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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

{:soso_e121:}

           #include<stdio.h>

           void swap(int x , int y);

           int
           main(void)
           {
                      int  x=0;
                      int  y=1;

                     print(“x is %d \n”,x);
                     print(“y is %d \n”,y);
                     print(“Swapping ... \n”);

                    swap(x,y);

                    print(“Swaped ! \n ”);
                    print(“x is %d \n”,x);
                    print(“y is %d \n”,y);  
             }


          void
          swap(int x , int y);

          {

               int temp=x;
                          x=y;
                          x=temp;

            }

交换不成功!


分析:main函数的变量 x y 与swap函数的x y是不同的区域它们之间没有任何联系的


解决思路:

引用指针传递参数... ...

  #include<stdio.h>

           void swap(int *x , int *y);

           int
           main(void)
           {
                      int  x=0;
                      int  y=1;

                     print(“x is %d \n”,x);
                     print(“y is %d \n”,y);
                     print(“Swapping ... \n”);

                    swap(&x,&y);  // 这里返回的是 x  y 的地址  不是x y 的值。

                    print(“Swaped ! \n ”);
                    print(“x is %d \n”,x);
                    print(“y is %d \n”,y);  
             }


          void
          swap(int *x , int *y);  //找到地址,定位到找到的地址那里去。

          {

               int temp=*x;
                          *x=*y;
                          *x=temp;

            }



指针的简单理解:改后交换成功!


yeah!      

点评

鼓励楼主多多分享java和c共同特点 尤其是java方面的偏重些 毕竟这里绝大多数还是在java基础学习的过程  发表于 2013-6-8 22:16
c语言和java中有很多相同点, 思想也有很多相同, 不过c的面向流程 和 java的面向对象有着很大的不同,  发表于 2013-6-8 22:15

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 鼓励下

查看全部评分

19 个回复

倒序浏览

回帖奖励 +5

好长时间不写c了   
大概记得是 swap(x,y);是引用传递
而swap(&x,&y);为地址传递  还是叫什么传递来着 忘了  那个名词
回复 使用道具 举报
void swap(int x , int y) 中的x和y的作用域就只在这个函数中, 交换值只是交换这个函数中的x跟y, 跟调用函数时候的实参不影响. 可以用return的方式影响外部.
void swap(int *x , int *y) 这个是改了指针的指向, 不用return就能影响.

ps. 代码里多了俩分号吧

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
shang1jk 发表于 2013-6-8 22:13
void swap(int x , int y) 中的x和y的作用域就只在这个函数中, 交换值只是交换这个函数中的x跟y, 跟调用函 ...

这么晚了都还在泡论坛, 顿感入学的压力好大啊...XD
回复 使用道具 举报
明白  我学完C语言就学习JAVA   我想接触一下C语言 再学习JAVA基础打牢在学习JAVA 
回复 使用道具 举报
shang1jk 发表于 2013-6-8 22:13
void swap(int x , int y) 中的x和y的作用域就只在这个函数中, 交换值只是交换这个函数中的x跟y, 跟调用函 ...

对对对 ! 我大意了  是多了!  谢谢.
回复 使用道具 举报
刘凯 发表于 2013-6-8 22:12
好长时间不写c了   
大概记得是 swap(x,y);是引用传递
而swap(&x,&y);为地址传递  还是叫什么传递来着 忘 ...

引用    嘿嘿,c++飘过,现在攻java,望前辈多多提携啊
回复 使用道具 举报
楼主看看,我用c++写的,写函数的时候可以不写&,在调用函数的时候在传递参数前加上&也行
  1. #include <iostream>
  2. using namespace std;
  3. void main()
  4. {
  5.         int x=0,y=1;
  6.         cin>>x>>y;
  7.         swap(x,y);
  8.         cout<<x<<""<<y<<endl;

  9. }

  10. void swap(int &x,int &y)
  11. {
  12.         int temp=x;
  13.         x=y;
  14.         y=temp;
  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
peerless2012 发表于 2013-6-9 10:19
楼主看看,我用c++写的,写函数的时候可以不写&,在调用函数的时候在传递参数前加上&也行 ...

:handshake
回复 使用道具 举报
  1. #include <stdio.h>
  2. /*
  3. 楼主,在c语言中,你确定库函数中有print这个输出函数?
  4. 我查找了半天也没有找到print这个函数。

  5. 楼主你确定中文状态下的“括号”和“引号”,可以运行成功?
  6. 在C-Free下面一串错误。。。
  7. */
  8. void wap(int *x,int *y)
  9. {
  10.         int temp = *x;
  11.         *x = *y;
  12.         *y = temp;
  13. }


  14. main()
  15. {
  16.         int x = 0;
  17.         int y = 1;
  18.         printf("%d,%d\n",x,y);
  19.        
  20.         wap(&x,&y);
  21.         printf("...........\n");
  22.         printf("%d,%d\n",x,y);
  23. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}
回复 使用道具 举报
袁梦希 发表于 2013-6-9 14:46
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。 ...

:o  ok  我刚来的 很多不懂  好的
回复 使用道具 举报
看来好多哥们都是从C过来的……
回复 使用道具 举报
花心々小土豆 发表于 2013-6-9 17:08
看来好多哥们都是从C过来的……

我觉得 学了C语言 基础好一点   理解JAVA快一点
回复 使用道具 举报
  1. void  swap(int x , int y);
  2.           {

  3.                int temp=x;
  4.                           x=y;
  5.                           x=temp;

  6.             }
复制代码
指针的存放是在堆中,而变量的存放是在栈内,栈用完就释放,所以当然没有交换成功了
java中也一样,普通变量也是放在栈内,而对象,数组则存放在堆内,
回复 使用道具 举报
回复 使用道具 举报
pys200603027 发表于 2013-6-10 22:59
指针的存放是在堆中,而变量的存放是在栈内,栈用完就释放,所以当然没有交换成功了
java中也一样,普通变 ...

:handshake
回复 使用道具 举报
值传递 和 指针传递(又叫地址传递),在 Java 里面对应 基本数据类型 和 引用数据类型,C 库里面没有 print 函数,但是 win32 api 里面有 print。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马