20.c/c++程序员面试宝典-引用与值传递

原创 2015年11月19日 09:55:54

20.c/c++程序员面试宝典-引用与值传递

c++语言中,函数的参数和返回值的传递方式有3种:引用传递、值传递和指针传递。指针编程者已经在上面进行了介绍,接下来介绍c++中引用和值传递的相关内容。



面试题93  什么是值传递*****


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

void Func1(int x)  //参数为值传递的函数

{

x=x+10;

}

...

int n=0;

Func1(n);

cout<<"n="<<n<<endl;


运行结果如下:

n=0


由于Func1函数体内的x采用的是值传递的方式,它只是外部变量n的一个副本,改变x的值不会影响n的值,所以n的值仍然是0。


【答案】值传递将要传递的值作为一个副本传递,在函数调用时,实参把它的值传递给对应的形参,方法执行中形参值的改变不影响实参,实参的值不会发生改变。



面试题94  引用与值传递的区别*****


分析:引用传递传递的是引用对象的内存地址。在地址传递过程中,被调用函数的形参也作为局部变量在堆栈中开辟了空间,但是这时存放的是由主调函数放进去的实参变量的地址。被调用函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。所以,别调用函数对形参做的任何操作都会影响主调函数中的实参变量,引用传递到的示例代码如下:

void Func2(int &x)

{

x=x+10;

}

...

int n=0;

Func2(n);

cout<<"n="<<n<<endl;


结果如下:

n=10

由于Func2()函数体内的x采用的是引用传递的方式,x是外部变量n的引用,x和n表示的是相同的对象,所以改变x也就改变了n,所以n的值更改为10.


引用传递和值传递是面试时考查频率非常高的问题。这个问题比较简单,所以更加需要掌握清楚,不要出现回答错误的情况。


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



面试题95  指针和引用有什么区别***


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


指针的功能非常强大,指针能够毫无约束地操作内存中的任何东西,由于指针功能强大,所以导致它比较危险。如果使用不当的话会对程序运行造成很大的影响,如果一些场合只需要借用一下某个对象的别名,那么就可以使用引用,而避免使用指针,以免发生意外。程序员可以根据程序的需要来灵活选择方案。


【答案】

(1)指针是一个实体,而引用仅仅是个别名;

(2)引用使用时无需解引用(*),指针需要解引用;

(3)引用只能在定义时被初始化一次,之后不可变,指针可以变;

(4)引用没有const,指针可以有const;

(5)引用不能为空,指针可以为空;

(6)“sizeof 引用”得到的是所指向的变量或对象的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;

(7)和引用的自增(++)运用意义不一样;

(8)在内存分配上,程序为指针变量分配内存区域,而引用不需要分配内存区域。


c++程序员面试宝典

静态存储区 static静态变量 全局变量 栈 局部变量 堆 动态分配的 栈堆:循环的迭代用中 数据量大 则溢出 239 static作用:静态变量的生存周期和作用域...
  • cyuyanchenxi
  • cyuyanchenxi
  • 2017-03-20 23:28:29
  • 797

《C与C++程序员面试宝典》电子书

  • 2018年01月30日 16:10
  • 9.72MB
  • 下载

C\C++程序员面试宝典最新版。pdf

  • 2017年11月10日 10:44
  • 4.42MB
  • 下载

程序员面试宝典(C/C++版,pdf扫描)

  • 2009年12月22日 12:59
  • 6.49MB
  • 下载

C_C++程序员面试宝典 文字版 非扫描

  • 2016年02月18日 15:22
  • 8.96MB
  • 下载

程序员面试宝典 7 - 指针与引用

指针基本问题 指针和引用的差别  ★相同点:       都是地址的概念;        指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。   ★ 区别:  指针是一个实...
  • yuhan_9204
  • yuhan_9204
  • 2015-06-06 17:34:08
  • 436

C/C++程序员面试宝典-1

第2部分 C/C++基础知识 1. C++中的基本数据类型: 2. C++中的整型: 3. C++中的常见常量 常量按照数据类型的不同分为整型常量,浮点型常量,字符型常量,还有...
  • benpaobagzb
  • benpaobagzb
  • 2015-09-14 16:43:02
  • 731

《C++面试宝典2015版》

  • 2015年07月02日 14:18
  • 93KB
  • 下载

程序员面试(c++)——指针与引用

本文是对《程序员面试宝典》第七章——指针与引用的学习总结,不足之处,欢迎批评指正。 1、指针和引用的区别? (1)指针可以指向空值,int* p=null;而引用则必须总是指向某个对象。 (2)指针在...
  • qq_27225851
  • qq_27225851
  • 2016-06-29 20:55:18
  • 380

《程序员面试宝典》基础知识点总结

笔者在2015年求职准备时,看《程序员面试宝典》一书,做的笔记。分享给大家,希望能有所帮助。 STL模板与容器 模板:类(及结构等各种数据类型和函数)的宏。有时叫做甜饼切割机,正规的名称应叫...
  • huxiaoyonglan1
  • huxiaoyonglan1
  • 2015-12-09 22:02:01
  • 1262
收藏助手
不良信息举报
您举报文章:20.c/c++程序员面试宝典-引用与值传递
举报原因:
原因补充:

(最多只允许输入30个字)