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

1、第214题 (1.0分) 题号:192 下面选择中正确的赋值语句是(设char a[5],*p=a;)()。

A
 p=“abcd”;
B
 a=“abcd”;
C
 *p=“abcd”;
D
 *a=“abcd”;

答案解析

正确答案:A

解析:

这道题考查的是 C 语言中**数组名**、**指针变量**以及**字符串常量**之间的赋值规则。 ### 核心概念分析 1. **变量定义**: * `char a[5]`:定义了一个字符数组 `a`,它包含 5 个字符的空间。在表达式中,数组名 `a` 代表数组首元素的地址,是一个**常量指针**(即地址不可修改)。 * `*p = a`:定义了一个字符指针 `p,并将数组 `a` 的首地址赋值给 `p`。此时 `p` 指向数组 `a` 的第一个元素。`p` 是一个**指针变量**,其值(指向的地址)是可以改变的。 2. **选项逐一解析**: * **A. `p="abcd";` 【正确】** * `"abcd"` 是一个字符串常量,它在内存中占据一段空间,并返回该字符串首字符 `'a'` 的地址。 * `p` 是一个指针变量。在 C 语言中,可以将一个地址赋值给指针变量。 * 这条语句的意思是:让指针 `p` 不再指向数组 `a`,而是指向字符串常量 `"abcd"` 的首地址。这是完全合法的语法操作。 * *注意:虽然语法正确,但此时 `p` 与数组 `a` 再无关系。如果题目意图是将字符串拷贝进数组 `a`,则应使用 `strcpy(a, "abcd");`,但仅就“赋值语句”的语法合法性而言,A 是正确的。* * **B. `a="abcd";` 【错误】** * `a` 是数组名。在 C 语言中,数组名是一个**地址常量**,不能作为左值被赋值。 * 你不能改变数组 `a` 本身的地址。若要给数组初始化或赋值,必须在定义时初始化(如 `char a[] = "abcd";`)或使用 `strcpy` 等函数拷贝内容。直接赋值是非法的。 * **C. `*p="abcd";` 【错误】** * `*p` 表示指针 `p` 所指向的**内容**(即一个 `char` 类型的变量)。 * `"abcd"` 是一个字符串常量,其类型是 `char *`(地址)。 * 试图将一个地址(`char *`)赋值给一个字符变量(`char`),类型不匹配。编译器会报错或发出警告(截断指针为字符),这不是正确的赋值方式。 * **D. `*a="abcd";` 【错误】** * `*a` 等价于 `a[0]`,表示数组第一个元素的值,类型为 `char`。 * 同样,试图将字符串常量的地址(`char *`)赋值给一个字符变量(`char`),类型不匹配,非法。 ### 总结 * **数组名**不能直接被赋值(它是常量地址)。 * **指针变量**可以被赋值为某个地址(包括字符串常量的地址)。 * **解引用后的指针/数组元素**(`*p` 或 `*a`)是字符类型,不能直接接收字符串地址。 因此,只有 **A** 选项符合 C 语言的语法规则。 **正确答案:A**
题目纠错
c语言选择判断题库

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

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