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

1、第241题 (1.0分) 题号:194 若有下列定义,则对a数组元素地址的正确引用是()。 int a[5],*p=a;

A
 &a[5]
B
 p+2
C
 a++
D
 &a

答案解析

正确答案:B

解析:

**解析:** 本题考查 C 语言中数组名、指针变量以及地址运算的相关概念。 **1. 题目分析** * `int a[5]`:定义了一个包含 5 个整型元素的数组 `a`,有效下标范围为 `0` 到 `4`。 * `*p = a`:定义了一个整型指针 `p`,并将其初始化为指向数组 `a` 的首地址(即 `p` 等价于 `&a[0]`)。 **2. 选项逐一分析** * **A. `&a[5]`** * 数组 `a` 的大小为 5,合法的下标是 `0, 1, 2, 3, 4`。 * `a[5]` 访问的是数组越界后的内存位置。虽然 `&a[5]` 在语法上是一个地址表达式(指向数组末尾之后的那个位置),但在常规编程规范中,访问越界元素通常被视为错误或未定义行为。更重要的是,在单选题中,如果有更标准、无歧义的选项,通常不选涉及越界的选项。不过,严格来说 `&a[5]` 确实是一个地址值,但相比 B 选项,B 是更典型且安全的指针运算表示。在某些严格的编译器或语境下,对越界元素取地址可能引发警告。*注:即便不考虑越界风险,我们看其他选项是否有更明显的错误或正确项。* * **B. `p+2`** * `p` 是指向 `int` 类型的指针,初始指向 `a[0]`。 * 根据指针算术运算规则,`p + i` 表示从 `p` 当前指向的位置向后移动 `i` 个元素的位置。 * `p + 2` 指向数组的第 3 个元素,即 `&a[2]`。 * 这是一个合法的地址表达式,类型也是 `int *`,完全符合“对数组元素地址的正确引用”。 * **C. `a++`** * `a` 是数组名。在大多数表达式中,数组名代表数组首元素的地址,它是一个**常量指针**(constant pointer),即它的值是不可修改的左值(non-modifiable lvalue)。 * `++` 是自增运算符,需要修改操作数的值。 * 因此,`a++` 试图修改数组名这个常量地址,这是**非法**的,编译会报错。 * **D. `&a`** * `a` 是数组名,`&a` 表示整个数组的地址。 * 虽然 `&a` 的数值大小与 `a` 或 `&a[0]` 相同,但它们的**类型不同**。 * `a` 和 `&a[0]` 的类型是 `int *`(指向整型的指针)。 * `&a` 的类型是 `int (*)[5]`(指向包含 5 个整型元素的数组的指针)。 * 题目问的是“对 a **数组元素**地址”的引用。通常“数组元素的地址”指的是 `int *` 类型。虽然 `&a` 也是地址,但它指向的是“整个数组”,而不是单个“元素”。相比之下,B 选项 `p+2` 明确指向某个具体元素且类型匹配,是更符合题意的标准答案。 **结论:** * A 选项涉及越界,虽为地址但不推荐。 * C 选项语法错误。 * D 选项类型是指向数组的指针,而非指向元素的指针。 * B 选项 `p+2` 合法地计算出了数组中第三个元素 `a[2]` 的地址,类型正确,语义清晰。 故正确答案为 **B**。
题目纠错
c语言选择判断题库

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

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