#CSPJ26D13. 2026 年 8 月 CSP-J 初赛 22 日打卡 Day13|内存、指针和引用

2026 年 8 月 CSP-J 初赛 22 日打卡 Day13|内存、指针和引用

Day 13 内存、指针和引用:给每个变量找到它的门牌号

建议用时:15~25 分钟。请先阅读知识点讲解,再完成下方客观题;直接勾选答案后提交,系统会自动判分。

知识点讲解

Day 13 内存、指针和引用:给每个变量找到它的门牌号

答案解析

Day 13 内存、指针和引用:给每个变量找到它的门牌号

客观题(共 10 题)

请在每题下方直接选择答案。判断题选择“正确”或“错误”,全部完成后统一提交。

第 1 题

在常见的 64 位编译环境下,下列表达式的值 不等于 8 的是( )。

{{ select(1) }}

  • sizeof(double)
  • sizeof(long long)
  • sizeof(char *)
  • sizeof(short)

第 2 题

某同学在 main 函数内部写下 int a[1000000];,程序一运行就异常退出;把这行移到 main 函数外面后一切正常。最合理的解释是( )。

{{ select(2) }}

  • 函数内部不允许定义数组
  • 局部数组分配在栈区,栈空间很小,装不下 4 MB 的数组
  • 全局数组会被自动压缩,占用的内存更少
  • 局部数组必须显式初始化后才能使用

第 3 题

有定义 int a = 10; int *p = &a;,则下列说法 错误 的是( )。

{{ select(3) }}

  • *p 的值是 10
  • p 的值是变量 a 的地址
  • 执行 *p = 20; 之后,a 的值变为 20
  • p 本身不占内存,因此 &p 是非法的

第 4 题

【CSP-J 2025 初赛·第 10 题】考虑以下 C++ 函数:

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);
}

在 main 函数调用 solve 后,x 和 y 的值分别是( )。

{{ select(4) }}

  • 5, 10
  • 10, 5
  • 10, 10
  • 5, 5

第 5 题

判断题:与指针不同,引用一经初始化就不能再指向其他变量,而且不存在空引用。( )

{{ select(5) }}

  • 正确
  • 错误

第 6 题

已知 int a[5]; int *p = a;,且 a 的首地址为 0x1000,则 p + 3 的值是( )。

{{ select(6) }}

  • 0x1003
  • 0x100C
  • 0x1012
  • 0x1005

第 7 题

设有 int a[10]; int *p = a;,下列语句中 不合法 的是( )。

{{ select(7) }}

  • p = p + 1;
  • a = a + 1;
  • p[2] = *(a + 2);
  • cout << *(p + 3);

第 8 题

阅读第七节给出的完整程序,它输出的 第一行 是( )。

{{ select(8) }}

  • 3 8
  • 8 3
  • 3 3
  • 8 8

第 9 题

仍然是第七节的程序,它输出的 第三行 是( )。

{{ select(9) }}

  • 8 3
  • 3 8
  • 8 8
  • 程序编译错误

第 10 题

下列关于动态内存的说法,正确的是( )。

{{ select(10) }}

  • int *p = new int[10]; 之后应当用 delete[] p; 释放
  • new 出来的内存位于栈区,函数返回时自动回收
  • 忘记 delete 不会有任何后果,程序结束前系统会自动补上
  • delete p; 与 delete[] p; 完全等价,可以随意互换