#CSPJ26D19. 2026 年 8 月 CSP-J 初赛 20 日打卡 Day19|引用、函数参数与作用域

2026 年 8 月 CSP-J 初赛 20 日打卡 Day19|引用、函数参数与作用域

Day 19 引用、函数参数与作用域

建议用时:20~25 分钟。请先打开今日知识卡完成复习,再独立提交本页答案。

今日学习资料

复习目标:理解引用是变量的别名,分清值传递、引用传递和指针传递,并能追踪函数调用前后的变量变化。

今日练习

  1. 【CSP-J 2025·第 10 题】考虑以下 C++ 函数,在 main 函数调用 solve 后,xy 的值分别是( )。

    void solve(int &a, int b) {
        a = a + b;
        b = a - b;
        a = a - b;
    }
    
    int main() {
        int x = 5, y = 10;
        solve(x, y);
    }
    

{{ select(1) }}

  • 5, 10
  • 10, 5
  • 10, 10
  • 5, 5
  1. 执行下面的代码后,x 的值是( )。

    void f(int a) { a += 3; }
    int x = 7;
    f(x);
    

{{ select(2) }}

  • 7
  • 10
  • 3
  • 无法确定
  1. 执行下面的代码后,x 的值是( )。

    int x = 7;
    int y = 12;
    int &r = x;
    r = y;
    

{{ select(3) }}

  • 7
  • 12
  • y 的地址
  • r 改为 y 的别名,x 不变
  1. 下列引用定义正确的是( )。

{{ select(4) }}

  • int &r;
  • int x=3; int &r=x;
  • int &r=nullptr;
  • int x=3; int &r=&x;
  1. 已知 int x=3; const int &r=x;,下列说法正确的是( )。

{{ select(5) }}

  • 可以执行 r=5 修改 x
  • r 可以随时改绑到另一个变量
  • 不能通过 r 修改所绑定的值
  • r 没有绑定任何对象

主题程序阅读

阅读下面的程序:

#include <iostream>
using namespace std;

void adjust(int a, int &b, int *c) {
    a += 1;
    b += a;
    *c = b - a;
}

int main() {
    int x = 3, y = 5, z = 8;
    adjust(x, y, &z);
    cout << x << ' ' << y << ' ' << z << endl;
    return 0;
}
  1. adjust 中执行 a += 1; 后,形参 a 和主函数变量 x 的值分别是( )。

{{ select(6) }}

  • 4, 4
  • 4, 3
  • 3, 4
  • 3, 3
  1. 执行 b += a; 后,主函数变量 y 的值是( )。

{{ select(7) }}

  • 5
  • 8
  • 9
  • 13
  1. 程序最终输出( )。

{{ select(8) }}

  • 4 9 5
  • 3 9 5
  • 3 5 8
  • 4 5 4