单选题
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语言选择判断题库
相关题目
单选题
1、第169题 (1.0分) 题号:744 当说明一个结构体变量时系统分配给它的内存是()。
单选题
1、第168题 (1.0分) 题号:490 以下字符中不是转义字符的是()。
单选题
1、第167题 (1.0分) 题号:510 int a=3,b=2,c=1; if( )a=b; else a=c; 则a的值为()。
单选题
1、第166题 (1.0分) 题号:652 在C语言中,引用数组元素时,其数组下标的数据类型允许是()。
单选题
1、第165题 (1.0分) 题号:176 数组名作为实参数传递给函数时,数组名被处理为()。
单选题
1、第164题 (1.0分) 题号:631 结构化程序设计所规定的三种基本控制结构是()。
单选题
1、第163题 (1.0分) 题号:712 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是()。
单选题
1、第162题 (1.0分) 题号:687 表达式,0x13&0x17的值是()。
单选题
1、第161题 (1.0分) 题号:113 执行下列语句后变量x和y的值是()。 y=10;x=y++;
单选题
1、第160题 (1.0分) 题号:634 以下不正确的定义语句是()。
