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

1、第47题 (1.0分) 题号:708 下面判断正确的是()。

A
 char *a=“china”;等价于 char *a;*a=“china”;
B
 char str[10]={“china”};等价于char str[10];str[]={“china”};
C
 char *s=“china”;等价于 char *s;s=“china”;
D
 char c[4]=“abc”,d[4]=“abc”;等价于 char c[4]=d[4]=“abc”;

答案解析

正确答案:C

解析:

这道题考查的是 C 语言中字符指针、字符数组的初始化与赋值的区别,以及字符串常量的处理机制。我们需要逐一分析每个选项中的两条语句是否等价。 **选项 A 分析:** * `char *a = "china";` 这是一条声明并初始化的语句。它定义了一个字符指针 `a`,并将字符串常量 `"china"` 的首地址赋值给 `a`。这是合法的。 * `char *a; *a = "china";` 第一条语句 `char *a;` 定义了一个未初始化的指针 `a`,此时 `a` 指向未知的内存区域(野指针)。 第二条语句 `*a = "china";` 试图将字符串常量 `"china"` 的地址(这是一个 `char *` 类型)赋值给 `*a`(这是一个 `char` 类型)。这里有两个错误: 1. 类型不匹配:不能将指针赋值给字符变量。 2. 非法内存访问:`a` 未初始化,对 `*a` 进行写操作会导致未定义行为(通常是段错误)。 **结论:** 两者不等价,且后者是错误的写法。 **选项 B 分析:** * `char str[10] = {"china"};` 这是数组的初始化语句。在定义数组 `str` 的同时,用字符串 `"china"` 对其进行了初始化。这是合法的。 * `char str[10]; str[] = {"china"};` 第一条语句 `char str[10];` 定义了数组。 第二条语句 `str[] = {"china"};` 是非法的。在 C 语言中,数组名是一个常量指针,不能作为左值被整体赋值。数组只能在定义时进行初始化,不能在定义之后使用 `=` 进行整体赋值。如果要复制字符串,需要使用 `strcpy` 函数。 **结论:** 两者不等价,后者编译错误。 **选项 C 分析:** * `char *s = "china";` 定义字符指针 `s` 并初始化为指向字符串常量 `"china"` 的首地址。 * `char *s; s = "china";` 第一条语句 `char *s;` 定义字符指针 `s`。 第二条语句 `s = "china";` 将字符串常量 `"china"` 的首地址赋值给指针变量 `s`。 这两步操作 combined 起来,效果与直接初始化完全相同:都是让指针 `s` 指向字符串常量 `"china"` 在内存中的位置。 **结论:** 两者等价,判断正确。 **选项 D 分析:** * `char c[4] = "abc", d[4] = "abc";` 定义了两个字符数组 `c` 和 `d`,并分别用 `"abc"` 初始化。这是合法的,`c` 和 `d` 各自拥有独立的内存空间存储 `"abc"`。 * `char c[4] = d[4] = "abc";` 这种连等赋值在数组初始化中是非法的。 1. C 语言不支持多个数组同时通过 `=` 连等初始化。 2. 即使理解为 `d[4] = "abc"` 然后 `c[4] = d[4]`,这也是错误的。`d[4]` 访问的是数组 `d` 的第 5 个元素(越界),且不能将字符串常量赋值给单个字符元素(类型不匹配,且语法结构完全错误)。 **结论:** 两者不等价,后者编译错误。 **综上所述:** 只有选项 C 中的两种写法在语义和执行结果上是完全等价的,且都符合 C 语言语法规范。 **正确答案:C**
题目纠错
c语言选择判断题库

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

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