单选题
1、第94题 (1.0分) 题号:164 下列数组说明中,正确的是()。
A
static char str[]=“China”;
B
static char str[]; str=“China”;
C
static char str1[5],str2[]={“China”}; str1=str2;
D
static char str1[],str2[];str2={“China”}; strcpy(str1,str2);
答案解析
正确答案:A
解析:
这道题考查的是 C 语言中字符数组的定义、初始化以及赋值规则。我们需要逐一分析每个选项的语法正确性。
**选项分析:**
* **A. `static char str[]=“China”;`**
* **分析**:这是正确的数组定义并初始化的方式。
* 在定义数组时,如果提供了初始化列表(这里是字符串常量 `"China"`),编译器会自动根据初始化内容的长度来确定数组的大小。
* 字符串 `"China"` 包含 5 个字符加上末尾的空字符 `\0`,共 6 个字节。因此,`str` 会被定义为长度为 6 的字符数组,并将 `"China\0"` 复制进去。
* `static` 关键字表示该变量具有静态存储期,语法上也是合法的。
* **结论**:**正确**。
* **B. `static char str[]; str=“China”;`**
* **分析**:这里有两个错误。
* 第一,`static char str[];` 这种定义方式是不合法的。如果在定义数组时没有指定大小,必须同时进行初始化,以便编译器推断数组长度。单独声明 `char str[]` 而不给大小且不初始化,编译器无法知道分配多少内存。
* 第二,即使假设 `str` 已经定义为某个大小的数组(例如 `char str[10];`),在 C 语言中,数组名是一个常量指针(地址常量),不能作为左值被赋值。语句 `str = "China";` 试图将字符串常量的地址赋给数组名,这是非法的。如果要给数组赋值字符串,应该使用 `strcpy` 函数或在定义时初始化。
* **结论**:**错误**。
* **C. `static char str1[5],str2[]={“China”}; str1=str2;`**
* **分析**:
* `str2[]={“China”}` 是合法的初始化,`str2` 大小为 6。
* `str1[5]` 定义了一个长度为 5 的数组。注意:`"China"` 需要 6 个字节(含 `\0`),如果要把 `"China"` 放入 `str1`,空间也不够(但这不是主要的语法错误点)。
* 主要错误在于 `str1=str2;`。同选项 B 一样,数组名不能作为左值进行赋值操作。C 语言不支持直接使用 `=` 将一个数组的内容拷贝给另一个数组。必须使用循环逐个元素赋值或使用 `strcpy`/`memcpy` 等库函数。
* **结论**:**错误**。
* **D. `static char str1[],str2[];str2={“China”}; strcpy(str1,str2);`**
* **分析**:
* `static char str1[],str2[];`:同样,定义数组时若未指定大小,必须立即初始化。这里只声明了未定长的数组而未初始化,语法错误。
* `str2={“China”};`:数组不能在定义之后使用 `{}` 进行整体赋值。初始化列表只能在定义时使用。
* `strcpy(str1,str2);`:由于前面的定义和赋值都错了,这行代码也无法正确执行。此外,`str1` 没有分配空间,使用 `strcpy` 会导致未定义行为。
* **结论**:**错误**。
**总结:**
只有选项 A 符合 C 语言关于数组定义和初始化的语法规则。数组可以在定义时通过字符串常量进行初始化,编译器会自动计算所需空间并完成拷贝。而其他选项均涉及非法的数组赋值操作或不完整的数组定义。
**正确答案:A**
题目纠错
c语言选择判断题库
相关题目
单选题
1、第165题 (1.0分) 题号:176 数组名作为实参数传递给函数时,数组名被处理为()。
单选题
1、第164题 (1.0分) 题号:631 结构化程序设计所规定的三种基本控制结构是()。
单选题
1、第163题 (1.0分) 题号:712 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是()。
单选题
1、第162题 (1.0分) 题号:687 表达式,0x13&0x17的值是()。
单选题
1、第161题 (1.0分) 题号:113 执行下列语句后变量x和y的值是()。 y=10;x=y++;
单选题
1、第160题 (1.0分) 题号:634 以下不正确的定义语句是()。
单选题
1、第159题 (1.0分) 题号:642 在C语言中,一维数组的定义方式为:类型说明符数组名()。
单选题
1、第158题 (1.0分) 题号:181 C语言中函数调用的方式有()。
单选题
1、第157题 (1.0分) 题号:717 fscanf函数的正确调用形式是()。
单选题
1、第156题 (1.0分) 题号:653 以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()。
