GESP 三级 · GESP 202312 C++ 三级 第 22 题

判断题 · 答案 A

← 整套速查表 GESP 三级 全部真题

题目

下面 C++ 程序将输出 $1$。()

int arr[10]={1};
cout<<arr[0]<<endl;
答案:A

解题思维

这题考数组初始化规则。拿到题先看声明:int arr[10]={1},数组长度10,初始化列表只有1个数。C++规定列表只填前几个,剩下的自动补0。所以arr[0]是1,arr[1]到arr[9]全是0。题目问cout<<arr[0]输出什么,答案就是1。

常见错误

最容易错就是把{1}误解成“整个数组都被赋值为1”,或者以为数组下标从1开始导致arr[0]不存在。其实C++数组下标从0开始,而且初始化列表长度不够时,未显式初始化的元素默认是0,不是1。

详细解析(节选)

【考点】数组初始化规则与下标取值范围

这道题考查的是C++中数组声明与初始化的基本规则,属于GESP三级“基础语法”模块的核心内容。命题人专门在这个点挖坑,因为很多初学者看到int arr[10]={1};就会直观地认为“数组里全是1”,完全忽略了初始化列表的长度限制和剩余元素的默认值。这是典型的“概念陷阱”——用看似简单的语法掩盖对内存填充机制的理解不足。

1. 概念厘清:数组初始化到底怎么工作?

在C++中,当你声明一个数组时,比如int arr[10],系统会在内存中为它分配10个连续的整型空间。如果你只写int arr[10]={1};,初始化列表{1}里只有一个元素。规则很明确:初始化列表只负责填充数组的前N个元素(N是列表长度),剩下的元素(这里就是arr[1]到arr[9])会自动初始化为0。这是C++标准规定的默认行为,目的是保证数组在创建时所有元素都有确定值,不会出现未定义状态。

所以,arr[0] = 1,而arr[1]...arr[9] = 0。这个结论是解题的基石,必须牢牢记住。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断