黑马程序员技术交流社区

标题: 这两段代码有什么区别? [打印本页]

作者: Mokill0911    时间: 2014-8-17 00:53
标题: 这两段代码有什么区别?
本帖最后由 Mokill0911 于 2014-8-17 15:15 编辑

Code 1:

  1. void swap(int &a,int &b)
  2. {
  3.     int temp;
  4.     temp=a;
  5.     a=b;
  6.     b=temp;
  7. }
复制代码




Code2:
  1. void swap(int a,int b)
  2. {
  3.     int temp;
  4.     temp=a;
  5.     a=b;
  6.     b=temp;
  7. }
复制代码




好吧,其实我问的是参数列表里两种变量的写法有什么区别 = =|||


作者: 迷失的独白    时间: 2014-8-17 02:15
本帖最后由 迷失的独白 于 2014-8-17 10:10 编辑

这是C里的,请恕我匮乏的知识和表达力
int a 指的是a的内容(即存在在a中的值,或者叫变量)
int &a  指的是一个内存地址值,
#include<stdio.h>
int var = 1;
int *ptr;
int main(void)
{
ptr = &var;(把var的内存地址赋给了ptr)
printf(略)
return 0;
}

那个数组举个例子,就好像
                int a[] = {0,1,2,3,4};
                int b[] = null;(当作指针)
                b=a;(把a的地址值赋给了b)
                System.out.println(a);
                System.out.println(b);

                System.out.println(a.equals(b));(true,指向了同一个地址值)
附送的

&a取的是a的地址。

(int)&a是将a的地址转换成int。
(int&)a 不经过转换, 直接得到a在内存单元的值,并将其按照int存储方式取出,转换成整数输出。
(int)a a在内存中的值转换成int类型







作者: Baiye    时间: 2014-8-17 02:48
上面的写法可以对实参进行操作,交换两传入的实参。下面的只能实现两个形参的交换。
作者: 冒牌高手    时间: 2014-8-17 07:13
实参和形参的区别呗
作者: huangxuanheng    时间: 2014-8-17 07:41
C的,第一种是把内存地址进行交换,第二种你平时怎么理解就怎么理解了
作者: 沿途小将    时间: 2014-8-17 09:31
迷失的独白 发表于 2014-8-17 02:15
看着像C里的,请恕我匮乏的知识int a 指的是a的内容(即存在在a中的值,或者叫变量)
int &a  指的是一个内 ...

这个靠谱
作者: Mokill0911    时间: 2014-8-17 15:09
迷失的独白 发表于 2014-8-17 02:15
这是C里的,请恕我匮乏的知识和表达力
int a 指的是a的内容(即存在在a中的值,或者叫变量)
int &a  指的 ...

…… 看的有点半懂不懂…… 于是拿着“形式参数or 实际参数”Google一下先……
作者: Mokill0911    时间: 2014-8-17 15:11
Baiye 发表于 2014-8-17 02:48
上面的写法可以对实参进行操作,交换两传入的实参。下面的只能实现两个形参的交换。 ...

记得以前有个哥们儿问过,怎么做一个函数,让其接收两个整数值然后交换位置。

他发现sawp(int a,int b) 这种写法只能使数值在函数调用时被交换,但调用该函数之后,打印a  和b   的值还是发现没有变化。

所以这里要实现他的目的应该用第一种写法,对么?
作者: jeromechen    时间: 2014-8-17 15:54
迷失的独白 发表于 2014-8-17 02:15
这是C里的,请恕我匮乏的知识和表达力
int a 指的是a的内容(即存在在a中的值,或者叫变量)
int &a  指的 ...

讲的很细,不错
作者: Baiye    时间: 2014-8-17 16:03
Mokill0911 发表于 2014-8-17 15:11
记得以前有个哥们儿问过,怎么做一个函数,让其接收两个整数值然后交换位置。

他发现sawp(int a,int b ...

对的,要使用第一种
作者: THE_FUTURE    时间: 2014-8-17 17:30
这是函数的重载  第一个是将 &a   &b的地址值赋给数组变量。 第二个是将a  b 的的地址值赋给数组变量。俩者属于同函数 不同形参!
作者: Mokill0911    时间: 2014-8-19 00:58
Baiye 发表于 2014-8-17 16:03
对的,要使用第一种

谢谢解答!
作者: Mokill0911    时间: 2014-8-19 00:59
THE_FUTURE 发表于 2014-8-17 17:30
这是函数的重载  第一个是将 &a   &b的地址值赋给数组变量。 第二个是将a  b 的的地址值赋给数组变量。俩者 ...

可能是因为我基本功还不够牢靠,所以理解的不是很透彻,但还是谢谢解答哈:)

会继续努力的!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2