#CSPJ26D18. 2026 年 8 月 CSP-J 初赛 20 日打卡 Day18|内存、地址与指针

2026 年 8 月 CSP-J 初赛 20 日打卡 Day18|内存、地址与指针

Day 18 内存、地址与指针

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

今日学习资料

复习目标:分清变量值、变量地址和指针中保存的地址,掌握取地址、解引用、指针赋值、数组指针和链表头插。

今日练习

  1. 【CSP-J 2022·第 3 题】运行以下代码片段的行为是( )。

    int x = 101;
    int y = 201;
    int *p = &x;
    int *q = &y;
    p = q;
    

{{ select(1) }}

  • x 的值赋为 201
  • y 的值赋为 101
  • q 指向 x 的地址
  • p 指向 y 的地址
  1. 【CSP-J 2023·第 4 题】已知链表节点定义如下,并有指向链表头部的指针 Node *head。要插入一个 data 为 42 的新节点,并使新节点成为第一个节点,正确操作是( )。

    struct Node {
        int data;
        Node *next;
    };
    

{{ select(2) }}

  • Node* newNode = new Node; newNode->data = 42; newNode->next = head; head = newNode;
  • Node* newNode = new Node; head->data = 42; newNode->next = head; head = newNode;
  • Node* newNode = new Node; newNode->data = 42; head->next = newNode;
  • Node* newNode = new Node; newNode->data = 42; newNode->next = head;
  1. 执行下面的代码后,a 的值是( )。

    int a = 7;
    int *p = &a;
    *p = 12;
    

{{ select(3) }}

  • 7
  • 12
  • a 的地址
  • 无法确定
  1. 【CSP-J 2022·第 4 题】链表和数组的区别包括( )。

{{ select(4) }}

  • 数组不能排序,链表可以
  • 链表比数组能存储更多的信息
  • 数组大小固定,链表大小可动态调整
  • 以上均正确
  1. 关于 int *p = nullptr;,下列说法正确的是( )。

{{ select(5) }}

  • p 当前不指向有效的 int 对象
  • *p 的值一定为 0
  • 可以安全执行 *p = 5
  • p 是一个普通整数变量

主题程序阅读

阅读下面的程序:

#include <iostream>
using namespace std;

int main() {
    int a[4] = {2, 4, 6, 8};
    int *p = a;
    int *q = p + 2;
    *p = *q;
    q = p + 3;
    *q += a[1];
    cout << a[0] << ' ' << a[2] << ' ' << a[3] << endl;
    return 0;
}
  1. 执行 int *q = p + 2; 后,q 指向( )。

{{ select(6) }}

  • a[0]
  • a[1]
  • a[2]
  • a[3]
  1. 执行 *p = *q; 后,a[0] 的值是( )。

{{ select(7) }}

  • 2
  • 4
  • 6
  • 8
  1. 程序最终输出( )。

{{ select(8) }}

  • 6 6 8
  • 6 6 12
  • 2 6 12
  • 6 4 12