以下哪个函数声明是符合语法的,且在调用时可以将二维数组的名字作为实际参数传递给形式参数 $a$?( )。
这道题考的是C++二维数组参数传递的退化规则,核心在于'第一维可省略,第二维必须写明',拿到题先想实参是二维数组名,它退化成指向首行的指针,形式参数必须匹配这个类型。
最容易栽跟头的就是选D,觉得指针数组更灵活,其实数组名退化后是一级指针,类型完全对不上;其次是B和C,把第二维大小空着以为编译器能猜,结果偏移量算不对直接报错;审题不清把'符合语法'看漏了,选了个虽然能编译但类型不匹配或者维度定义错误的选项。
【考点】C++数组参数传递|指针与数组的关系|函数声明语法
1. 考纲定位 C++基础语法(参数传递特性)。这道题卡住的是'以为数组传参和指针一样'的群体——C++里数组名退化为指针时,编译器需要知道每行长度才能计算偏移量,八级考纲专门强调这点,因为这是C++和C语言在参数传递上最隐蔽的差异。
2. 解题思维 看到二维数组作实参,先想:C++不会做数组到指针的隐式转换,必须显式声明为'指针数组'或'退化的数组指针'。退化规则是:第一维可省略,第二维必须写明,否则编译器无法算 a[i][j] 的地址(需要 sizeof 第二维)。因此 int a[][10] 合法(等价于 int(*)[10]),int **a 是'指针的指针',和数组完全两码事。
3. 陷阱拆解
4. 反命题思维 命题人把四个选项排成递进式陷阱:从'第二维空'到'双空'再到'二级指针',考的是你是否理解退化规则背后的类型系统。考场上一问:'数组名是几级指针?'答:'一级'(指向整个数组的指针);'二维数组名退化成几级指针?'答:'一级,指向首行'——记住这个,以后遇到类似参数传递题就不会栽跟头。
5. 考频与趋势 本题涉及的'复合类型'考点在题库共考过146题,覆盖7个级别,其中GESP八级考了16题,占比约11%,属于八级高频必考点;'一维数组'考点共224题,GESP八级考了19题,占比约8.5%;'排序基础'考点共249题,GESP八级考了27题,占比超11%,说明八级对数组操作与排序结合考查很重视;'快速排序'考点共53题,GESP八级考了7题,占比约13%,2023-2026年每年都有涉及,且2023年考了6题,今年这道题正是快速排序函数声明的变体,符合近年'考基础语法细节'的趋势。
6. 预测 基于数据,GESP八级未来仍会高频考查数组参数传递的退化规则与指针类型匹配,尤其是将数组作为实参时第二维必须指定的细节,预计2026年及以后仍会有类似题目出现,但可能会结合更多实际排序算法实现来增加复杂度,单纯考声明语法的概率略有下降,但作为基础题依然会保留。暂无足够依据预测具体年份的题型变化,但'数组参数传递'这一知识点在八级属于稳中有升的趋势。