有如下函数定义: void swap(int a, int& b) { int c=a; a=b; b=c; } 若执行语句序列 int x = 0, y = 1; swap(x, y); 则变量 x 和 y 的值分别是

admin2019-03-05  35

问题 有如下函数定义:
    void swap(int a, int& b) { int c=a; a=b; b=c; }
若执行语句序列
    int x = 0, y = 1;
    swap(x, y);
则变量 x 和 y 的值分别是

选项 A、0和0
B、0和1
C、1和0
D、1和1

答案A

解析 参数传递有三种:
传值(value),传址(address),和传引用(reference)
传值时子函数(被调用者)复制父函数(调用者)传递的值,这样子函数无法改变父函数变量的值。函数swap的第一个参数就是传值调用,所以它的值不会改变
传址时父函数将变量的地址传递给子函数,这样子函数可以能过改写地址里的内容改变父函数中的变量
传引用则是一种看起来像传值调用,而实际上功能同传址一样的传递方式。子函数可以改写父函数的变量值。函数swap的第二个参数就是传引用调用,可以改变其值,所以执行完函数后,b值与a值相同,即都是0,A选项正确。
转载请注明原文地址:https://jikaoti.com/ti/d4t0FFFM
0

最新回复(0)