← 2022 · 大疆创新 笔试

推荐答案 测试一下

systemverilog语句,已知:

A.arr[0][0]=new[2]; B.arr[1][0]=new[2]; C.arr[0][ ]=new[2]; D.arr[0][1][1]=new[2];
单选题 中等 笔试真题单选

参考答案

正确选项为A。 解析: 1. 理解变量声明:`int arr[2][ ][ ]` 是一个多维动态数组,其中第一维固定为2(静态),后两维是动态的。即 `arr` 是一个包含2个元素的固定数组,每个元素是一个动态数组(该动态数组的元素又是动态数组,最终元素是int类型)。 2. 已知 `arr[0] = new[4];` 为 `arr[0]` 分配了一个大小为4的动态数组,其每个元素是未初始化的动态数组(句柄为null)。 3. 选项分析: - A. `arr[0][0] = new[2];` 合法。`arr[0]` 是长度为4的动态数组,`arr[0][0]` 是该数组的第一个元素(类型为动态数组句柄),通过 `new[2]` 为其分配一个大小为2的动态整数数组,完全正确。 - B. `arr[1][0] = new[2];` 非法。`arr[1]` 从未被分配(仍为null),访问 `arr[1][0]` 会导致空指针解引用,编译时一些工具可能报错,运行时必然崩溃。 - C. `arr[0][ ] = new[2];` 非法。语法错误,`[ ]` 不是合法的索引表达式,不能直接用于赋值左侧。正确写法应指定具体索引如 `arr[0][0]`。 - D. `arr[0][1][1] = new[2];` 非法。首先确保 `arr[0][1]` 已被分配(此处未分配),即使已分配,`arr[0][1][1]` 是整型变量,不能存储动态数组句柄,类型不匹配。 4. 易错点: - 混淆多维动态数组的层级:`arr[0]` 是动态数组,`arr[0][0]` 是动态数组,`arr[0][0][0]` 才是整数。 - 忘记动态数组在使用前必须分配,否则访问任何元素都是非法的。 - 忽略赋值两侧类型必须匹配:`new[n]` 返回动态数组句柄,只能赋给相同类型的动态数组变量,不能赋给整型变量。

涉及知识点

  • 多维动态数组的声明与层级
  • 动态数组的分配(new)与初始化
  • 数组索引的合法性检查
  • 句柄与数据类型的匹配
  • 空指针解引用错误
← 上一题
登录后反馈错题
下一题 →