引用与值传递

参考《C/C++程序员面试宝典》

引用与值传递

在C++中,函数的参数和返回值的传递方式有3中:引用传递、值传递和指针传递。

什么是值传递

值传递是指将要传递的值当做一个副本传递。值传递过程中,被调函数的形参作为被调函数的局部变量处理,在内存的堆栈中开辟空间以存放由主调函数存放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形参的任何操作都是作为局部变量进行,不会更改主调函数的实参变量的值。

void func1(int x)
{
    x = x + 10;
}

int n = 0;
func1(n);
count << "n = " << n << endl;  //输出n = 0

值传递将要传递的值当做一个副本传递,在函数调用时,实参把它的值传递给对应的形参,方法执行中形参值的改变不影响实参。

引用与值传递的区别

引用传递传递的是引用对象的内存地址。在地址传递中,被调函数的形参也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被作为间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。所以,被调函数对相残做的任何改变都会影响主调函数中的实参变量。

void func2(int& x)
{
    x = x + 10
}

int n = 0;
func2(n);  // 引用传递
cout << "n = " << n << endl;  // 输出 n = 10

值传递 传递的是一个值的副本。函数对形参的操作不会影响实参的值,而引用传递传递的是引用对象的内存地址,函数对形参的操作会影响实参的值,实参的值将会随着形参值的更改而同样进行改变

指针和引用的区别

指针和引用都是关于地址的概念,指针指向一块内存,它的内容是所指内存的地址。而应用是某块内存的别名。指针是作为一个真正的实体存在的。

指针能够毫无约束地操作内存中的任何东西,由于指针功能强大,所以导致它比较危险。

指针和引用的具体区别如下:

  1. 指针是一个实体,而引用仅是个别名;
  2. 引用使用时无需解引用(*),指针需要解引用;
  3. 引用只能在定义时被初始化一次,之后不可变;指针可变
  4. 引用没有const,指针有const;
  5. 引用不能为空,指针可以为空;
  6. sizeof对引用得到的是所指对象的大小,对指针是指针本身的大小;
  7. 指针和引用的自增(++)运算不一样;
  8. 程序为指针分配内存空间,引用则没有。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值