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

1、第3题 (1.0分) 题号:187 经过下列的语句 int j,a[10],*p;定义后,下列语句中合法的是()。

A
 p=p+2;
B
 p=a[5];
C
 p=a[2]+2;
D
 p=&(j+2);

答案解析

正确答案:A

解析:

**解析:** 首先分析题目中给出的变量定义: `int j, a[10], *p;` * `j` 是一个整型变量 (`int`)。 * `a` 是一个包含10个整数的数组 (`int[10]`),数组名 `a` 在表达式中通常代表数组首元素的地址,即 `int*` 类型。 * `p` 是一个指向整型的指针变量 (`int*`)。 接下来逐项分析各个选项的合法性: **A. `p = p + 2;`** * **分析**:`p` 是 `int*` 类型的指针。在 C/C++ 语言中,指针可以进行算术运算。`p + 2` 表示将指针 `p` 向后移动 2 个 `int` 类型大小的位置,结果仍然是一个 `int*` 类型的地址。 * **赋值**:将一个 `int*` 类型的值赋给 `int*` 类型的变量 `p`,类型匹配,语法合法。 * **注意**:虽然此时 `p` 尚未初始化(指向未知内存),直接解引用会导致未定义行为,但仅就**语句本身的语法和类型兼容性**而言,该赋值语句是合法的。 **B. `p = a[5];`** * **分析**:`a[5]` 访问的是数组 `a` 的第 6 个元素,其类型是 `int`(整型数值)。 * **赋值**:试图将一个 `int` 类型的值直接赋给 `int*` 类型的指针变量 `p`。 * **结论**:类型不匹配。在标准 C/C++ 中,不能直接将整数赋给指针(除非使用强制类型转换,如 `p = (int*)a[5];`,但原题没有转换)。因此,该语句**非法**。 **C. `p = a[2] + 2;`** * **分析**:`a[2]` 是 `int` 类型,`2` 也是 `int` 类型,所以 `a[2] + 2` 的结果是 `int` 类型。 * **赋值**:同样是将 `int` 类型的值赋给 `int*` 类型的指针 `p`。 * **结论**:类型不匹配,该语句**非法**。 **D. `p = &(j + 2);`** * **分析**:`j + 2` 是一个算术表达式,计算结果是一个临时的整数值(右值,rvalue)。 * **取地址**:C/C++ 规定,只能对**左值**(lvalue,即具有确定内存地址的对象,如变量)使用取地址运算符 `&`。临时计算结果没有固定的内存地址,因此不能对其取地址。 * **结论**:语法错误,该语句**非法**。 **总结:** 只有选项 A 中的指针算术运算和赋值在类型上是完全匹配的,符合 C/C++ 语法规则。 **正确答案:A**
题目纠错
c语言选择判断题库

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

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