单选题
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语言选择判断题库
相关题目
单选题
1、第212题 (1.0分) 题号:688 若a=1,b=2则 a|b的值是()。
单选题
1、第211题 (1.0分) 题号:622 putchar函数可以向终端输出一个()。
单选题
1、第210题 (1.0分) 题号:493 C语言的注释定界符是()。
单选题
1、第209题 (1.0分) 题号:177 以下描述中,正确的是()。
单选题
1、第208题 (1.0分) 题号:577 在C语言中,int、char和short三种类型数据在内存中所占用的字节数()。
单选题
1、第207题 (1.0分) 题号:201 当定义一个结构体变量时,系统分配给它的内存是()。
单选题
1、第206题 (1.0分) 题号:624 以下关于运算符优先顺序的描述中正确的是()。
单选题
1、第205题 (1.0分) 题号:127 下列程序的输出结果是()。
单选题
1、第204题 (1.0分) 题号:590 若变量a与i已正确定义,且i已正确赋值,合法的语句是()。
单选题
1、第203题 (1.0分) 题号:536 enum a {sum=9,mon=-1,tue}; 定义了()。
