AI智能推荐题库-试题通 AI智能整理导入题库-试题通
×
首页 题库中心 c语言选择判断题库 题目详情
CA4E3A01C46000013755684012D01E55
c语言选择判断题库
379
单选题

1、第90题 (1.0分) 题号:703 若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是()。

A
 &t[3][2]
B
 t[3]
C
 &t[1]
D
 t[2]

答案解析

正确答案:D

解析:

### 题目解析 **正确答案:D** #### 1. 数组定义分析 题目中定义了二维数组 `int t[3][2];`。 - **行数**:3行,下标范围为 `0` 到 `2`。 - **列数**:2列,下标范围为 `0` 到 `1`。 - **元素类型**:`int`。 在 C 语言中,二维数组名 `t` 可以看作是一个指向包含 2 个整数的一维数组的指针(即 `int (*)[2]` 类型)。 #### 2. 选项逐一分析 * **A. `&t[3][2]`** * **错误原因**:**数组越界**。 * `t[3]` 表示第 4 行,但数组只有 3 行(下标 0, 1, 2),所以 `t[3]` 已经越界。 * `t[3][2]` 表示第 4 行的第 3 个元素,同样严重越界。虽然取地址运算符 `&` 在某些情况下允许对越界位置取址(只要不 dereference),但在常规考试语境中,这通常被视为非法或错误的引用,且它表示的是一个具体的 `int` 元素的地址,而非题目考察的重点(通常考察行指针或合法元素地址)。更重要的是,相比之下 D 选项是标准的合法表达。 * **B. `t[3]`** * **错误原因**:**数组越界**。 * `t[i]` 代表数组的第 `i` 行。由于行下标最大为 2,`t[3]` 超出了数组边界,属于非法访问。 * **C. `&t[1]`** * **分析**:`t[1]` 是数组的第 2 行(一个包含 2 个 int 的一维数组)。`&t[1]` 获取的是这一行的地址。 * **类型**:`t[1]` 的类型退化后是 `int *`(指向该行首元素),但作为数组名参与 `&` 运算时,`&t[1]` 的类型是 `int (*)[2]`(指向包含2个int的数组的指针)。 * **对比**:虽然 `&t[1]` 在语法上是合法的,并且确实表示某个元素的地址(第1行第0个元素的地址),但在单选题中,通常需要寻找最符合“数组元素地址”常规表示法的选项。让我们先看 D。 * **D. `t[2]`** * **正确原因**:**合法且符合指针退化规则**。 * `t[2]` 指的是二维数组 `t` 的最后一行(第 3 行)。 * 在 C 语言中,当二维数组的行名 `t[i]` 出现在表达式中时,它会**退化**为指向该行第一个元素的指针,即 `&t[i][0]`。 * 因此,`t[2]` 等价于 `&t[2][0]`。 * `&t[2][0]` 正是数组中一个具体元素(第 3 行第 1 列)的地址。 * 该表达式没有越界(行下标 2 合法),且直接表示了一个元素的地址。 #### 3. 为什么选 D 而不选 C? 虽然 `&t[1]` 和 `t[2]` 都是合法的地址表达式,但题目的问法通常侧重于考察**数组名作为指针的使用**。 - `t[2]` 直接利用了下标运算符,结果是指向 `t[2][0]` 的指针(`int *` 类型),这是表示“数组元素地址”最直接、最常用的方式。 - `&t[1]` 得到的是指向整个一维数组的指针(`int (*)[2]` 类型)。虽然它的值(内存地址数值)与 `&t[1][0]` 相同,但类型不同。 - 在此类经典考题中,`t[i]` 被广泛接受为表示第 `i` 行首元素地址的标准写法。而 A、B 明显越界,C 的类型语义稍显复杂(指向数组的指针),D 是最标准、无歧义的“元素地址”表示(指向 int 的指针)。 **总结:** - `t[2]` 等价于 `&t[2][0]`,是数组中合法元素 `t[2][0]` 的地址。 - A、B 越界。 - C 虽然地址值合法,但 D 更符合“表示元素地址”的常规考点(即行名退化为列指针)。 故正确答案为 **D**。
题目纠错
c语言选择判断题库

扫码进入小程序
随时随地练习

关闭登录弹窗
专为自学备考人员打造
勾选图标
自助导入本地题库
勾选图标
多种刷题考试模式
勾选图标
本地离线答题搜题
勾选图标
扫码考试方便快捷
勾选图标
海量试题每日更新
波浪装饰图
欢迎登录试题通
可以使用以下方式扫码登陆
APP图标
使用APP登录
微信图标
使用微信登录
试题通小程序二维码
联系电话:
400-660-3606
试题通企业微信二维码