下面函数用于将一个 3 行 5 列二维数组的第 r 行元素全部加 1,横线处正确的形参写法是( )。
void addOne(________, int r) {
for (int j = 0; j < 5; j++) {
arr[r][j]++;
}
}看到二维数组函数形参,先想 C++ 数组传参规则——数组名退化为指针,但第二维必须指定。
选项 A 缺第二维,C++ 语法直接报错;选项 B 是二级指针,无法按 arr[r][j] 访问;选项 D 第一维固定却第二维缺失,同样非法。
本题考查《GESP 考试大纲》C++ 二级"数组与指针"模块中"二维数组传参"考点。命题人卡住的是考生对 C++ 数组形参退化规则的模糊认知——绝大多数人知道一维数组传参退化为指针,却误以为二维数组可以随意省略第二维,导致选错 A 或 B。
看到 void addOne(________, int r) 且函数体用 arr[r][j],先锁定"二维数组传参"场景。
C++ 规则:数组名作参数时,第一维可省略,第二维必须指定(否则编译器无法计算偏移量)。因此形参只能是 int arr[][5]。