引用与取地址有什么区别?

所谓引用就是为对象起一个别名。例如变量b = &a,b就是a的一个引用。对b的任何操作等同于对a的操作,也就是说,如果你改变了b的值,同时a的值也会发生改变。b就是a的另外一个名字,他们实质是同一个变量。就好比是同一个人,只不过穿着不同的衣服而已。至于引用的用处,给你举一个简单的例子,比如一个交换两个值的函数swap(int a, int b),如果将两个值带进去,发生交换的只是形参a和b,因为函数结束的时候这两个参数的生命周期结束了,换句话说,实参a和b的值并未发生交换。而如果swap(int &a,int &b)则不同,他的参数是a和b的引用,也就是说函数中的a和b就是你带入的实参,当函数中的a和b发生变化时,被引用的值在同时也发生了变化,而不会受到函数声明周期的影响。取地址则顾名思义,就是取得对象的地址,通过指针来操作对象,也可以达到引用的效果,它不是直接对对象进行操作,而是根据对象的地址。与引用不同的是,引用是不占用存储空间的,而如果用指针指向对象地址的时候会有自己的存储空间。举个简单的例子,swap(int *a, int *b), *a和*b是指向实参的指针,即他们有实参的地址,而我们知道a和b的地址是没有改变的,那么根据他们的地址就可以操作他们的值,也就不用考虑函数生命周期了。举的例子比较简单,实际中的应用比这个复杂的多。只要能理解就好。

引用&,你可以理解为给变量起了个别名。  只有在定义和声明或者说明参数类型的时候才用,平时引用变量和普通变量一样  比如:   
  int&   b;//只是说明作用   
  b=8;   
    
  取地址符号&是一个“动作”,表示取该变量的地址。  比如:   
  int   a   =   8;   
  int   *b  =   &a;//这里是取a的地址
转自:http://zhidao.baidu.com/question/557795453.html
### 回答1: 引用指针都是 C 语言中用于处理变量地址的概念,但它们有一些区别引用是一个变量的别名,它原变量共享同一个地址,可以直接访问原变量的值,而不需要使用解引用操作符。指针是一个变量,它存储了另一个变量的地址,需要使用解引用操作符才能访问原变量的值。此外,引用在定义时必须初始化,而指针可以先定义再初始化。 ### 回答2: 引用(Reference)指针(Pointer)是C++中两种不同的方式来访问内存中的数据。 首先,从语法角度来说,引用是在定义时直接已存在的变量进行关联,而且一旦关联了某个变量,就不能再改变关联对象。指针则是变量,用来存储某个变量的内存地址,可以通过改变指针的值来指向不同的对象。 其次,从使用方式来说,引用使用起来更加简洁直观。我们可以通过引用直接使用被关联变量的值,并且不需要使用解引用操作符。指针则需要使用解引用操作符来获取被指向对象的值。 再次,从安全性角度来说,引用相对指针更加安全。因为引用在定义时必须已存在的变量进行关联,而且不能关联空值,所以不存在空指针的问题。指针则可能存在空指针的情况,使用时需要进行判空操作,以防止程序崩溃或发生未定义的行为。 最后,从底层机制来说,引用在编译器层面就进行了地址的运算,所以引用的性能开销更小。指针在使用时需要进行取地址引用操作,相对而言开销更大。 综上所述,引用指针在语法、使用方式、安全性底层机制上都有一些区别。在实际开发中,我们可以根据具体需求选择使用引用或者指针。 ### 回答3: 引用指针在C++中都用于访问操作内存中的数据,但它们之间有一些重要的区别。 1. 定义方式:引用是在声明时使用&符号来定义的,例如int& ref = num;而指针是通过在声明时使用*符号来定义的,例如int* ptr = #引用必须在声明时进行初始化,而指针可以在后续的代码中进行初始化或者改变所指向的对象。 2. 空值:指针可以被设置为NULL,表示不指向任何有效的内存地址。而引用必须指向一个已经存在的对象,引用本身不会成为一个空值。 3. 内存管理:指针可以通过使用newdelete关键字进行动态内存的分配释放,从而允许动态地创建销毁对象。而引用必须在创建时就指向一个已经存在的对象,并且不能通过引用来动态地创建或销毁对象。 4. 操作方式:引用在使用时不需要进行解引用操作,即可以直接对引用进行操作,编译器会自动将引用指向的对象进行解引用。而指针需要通过解引用操作符*来访问指针指向的内存。 5. 常量:指针可以被声明为const,表示指针本身是一个常量,而引用不能被声明为const,因为引用本身已经是一个常量。 总的来说,引用指针都可以用于操作访问内存中的数据,但引用更简洁、更安全,而指针更灵活、更复杂。使用时需要根据具体的需求场景来选择合适的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值