函数参数传递:值传递、引用传递、指针传递
函数参数传递:值传递、引用传递、指针传递
掌握函数参数的传递方式:C++值传递、引用传递、指针传递。
值传递:拷贝实参给形参,改形参不影响实参。引用传递 T &:形参是实参的别名,修改形参即修改实参。指针传递 T *:传递地址,通过解引用可改所指对象;也可传 nullptr。
GESP 四级高频:三种方式下函数内赋值能否带回主调函数、何时需要 & 取地址传给指针形参、引用形参是否还要再解引用。swap、读入多个返回值等小函数,是检验三种传递是否真懂的经典场景。
void inc_val(int x) { x++; }
void inc_ref(int &x) { x++; }
void inc_ptr(int *p) { if (p) (*p)++; }
int n = 5;
inc_val(n); inc_ref(n); inc_ptr(&n); // 只有后两者让 n 增加
写函数前想清楚:是要「只读一份拷贝」,还是要「改调用方的变量」。
给定以下代码,
void func(int& x) {
x = x * 2;
}
int a = 5;
func(a);
执行上述代码后,变量 a 的值为( )。
函数参数可以通过值传递、引用传递和指针传递,这样函数内对参数的修改可以直接修改传入变量的值。
以下哪种参数传递方式可以避免拷贝大型对象?
执行下述代码,将输出( )。
void swap(int a, int &b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 1, y = 2;
swap(x, y);
std::cout << x << y;
return 0;
}
下面 C++ 代码的输出是 15。
void foo(int x) {
x += 5;
}
int main() {
int a = 10;
foo(a);
cout << a << endl;
}
在 C++ 中,相比于值传递,使用引用传递作的优点可以直接操作和修改原始变量,避免数据拷贝,提高效率。
原文保真说明:原卷印刷错误 1 处(照原卷保留,未作修改)
原卷印刷如此错字题干
原卷作
使用引用传递作的优点可以直接,常规写法应为使用引用传递的优点是可以直接原卷第 6 页第 4 题「引用传递作的优点」为印刷错字(600 dpi 裁图 qc-p06-tf05-6.png 确认),照录未改。
下面程序运行的结果是( )。
void increaseA(int x) {
x++;
}
void increaseB(int* p) {
(*p)++;
}
int main() {
int a = 5;
increaseA(a);
cout << a << " ";
increaseB(&a);
cout << a;
}
执行下面 C++ 代码将输出 10。
void func(int* p) {
*p = 10;
}
int main() {
int a = 5;
func(&a);
cout << a << endl;
return 0;
}
执行完下面的代码后,a、b 和 c 的值分别是( )。
void byValue(int x) { x = 100; }
void byRef(int& x) { x = 200; }
void byPointer(int* x) { *x = 300; }
int main() {
int a = 1, b = 2, c = 3;
byValue(a);
byRef(b);
byPointer(&c);
return 0;
}
执行下面程序后,变量 a 的值会变成 15。
void add(int &x){
x += 10;
}
int a = 5;
add(a);
执行下面程序后,输出为( )。
void fun(int a, int &b, int *c){
a += 1;
b += 2;
*c += 3;
}
int main(){
int x = 1, y = 1, z = 1;
fun(x, y, &z);
cout << x << " " << y << " " << z;
}
下面代码执行结束时,变量 a 的值变成 15。
void add10(int &x) { x += 10; }
int main() {
int a = 5;
add10(a);
}
引用一旦绑定某个变量,就不能再绑定其他变量。( )
小杨正在编写一个“数字交换器”程序,他希望通过函数交换两个变量的值。请问运行以下代码后,屏幕上输出的是( )。
void exchange(int *a, int &b) {
int t = *a;
*a = b;
b = t;
}
int main() {
int x = 100, y = 200;
exchange(&x, y);
cout << x << " " << y;
return 0;
}
在 C++ 中,引用一旦初始化并绑定到某个变量后,可以通过赋值语句将其重新绑定到另一个变量。
小杨想通过下面程序给饭卡充值,程序会输出 70。
void recharge(int money) {
money += 20;
}
int main() {
int card = 50;
recharge(card);
cout << card;
return 0;
}