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

1、第122题 (1.0分) 题号:193 具有相同类型的指针变量p与数组a,不能进行的操作是()。

A
 p=a;
B
 *p=a[0];
C
 p=&a[0];
D
 p=&a;

答案解析

正确答案:D

解析:

这道题考查的是 C 语言中**指针与数组之间的关系**,特别是指针赋值时的类型匹配问题。 ### 核心概念解析 在 C 语言中,假设定义如下: ```c int a[10]; // 数组 a,包含10个整数 int *p; // 指针 p,指向一个整数 ``` 我们需要分析数组名 `a` 和取地址操作 `&a` 的区别: 1. **数组名 `a`**: * 在大多数表达式中,数组名 `a` 会**退化**(decay)为指向数组第一个元素的指针。 * 类型:`int *`(指向 int 的指针)。 * 值:等于 `&a[0]`。 2. **取地址 `&a`**: * 这是对**整个数组**取地址。 * 类型:`int (*)[10]`(指向包含10个整数的数组的指针,即**数组指针**)。 * 值:虽然数值上通常也等于数组首地址,但**类型不同**。 3. **指针变量 `p`**: * 类型:`int *`(指向 int 的指针)。 --- ### 选项逐一分析 * **A. `p = a;`** * `a` 退化为 `int *` 类型。 * `p` 是 `int *` 类型。 * **类型匹配**,可以赋值。这是将指针指向数组首元素的常用写法。 * ✅ **合法** * **B. `*p = a[0];`** * `a[0]` 是数组的第一个元素,类型为 `int`。 * `*p` 表示指针 p 所指向的内存位置,类型也是 `int`(左值)。 * 这是将一个整数值赋给指针所指向的内存单元。 * **注意**:前提是 `p` 已经初始化并指向合法的内存空间,否则运行时会出错,但从**语法和类型操作**角度看,这是合法的赋值操作(int 赋给 int)。题目问的是“不能进行的操作”,通常指编译错误或类型不匹配,此选项语法正确。 * ✅ **合法** * **C. `p = &a[0];`** * `a[0]` 是数组第一个元素。 * `&a[0]` 是第一个元素的地址,类型为 `int *`。 * `p` 是 `int *` 类型。 * **类型匹配**,可以赋值。这与 `p = a;` 等价。 * ✅ **合法** * **D. `p = &a;`** * `&a` 的类型是 `int (*)[10]`(数组指针)。 * `p` 的类型是 `int *`(普通指针)。 * **类型不匹配**:一个是“指向数组的指针”,一个是“指向整型的指针”。 * 在标准 C 语言中,这两种指针类型不同,直接赋值会导致**编译警告或错误**(取决于编译器严格程度)。虽然它们的数值可能相同,但语义和步长完全不同(`p+1` 移动 4 字节,`&a+1` 移动 40 字节)。 * ❌ **不合法(类型不兼容)** --- ### 结论 选项 D 中,将“数组指针”赋值给“普通指针”,存在类型不匹配的问题,因此是不能直接进行的操作(除非使用强制类型转换,但题目未提及)。 **正确答案:D**
题目纠错
c语言选择判断题库

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

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