【分析】备选答案①中省略了数组长度,所以每个元素都赋了初值,共计 4 个元素,初值
依次为'l'、'2'、'3'、'\0',最后一个元素的值为字符串结束标记,所以数组 S 中存放的是
字符串"123",该答案不符合题意(即正确的);备选答案③中直接赋予字符串作为初
值所以数组 s 的长度为 4,其中的初值是字符串"123",不符合题意(即正确的);备选
答案③中也是给数组 s 赋予字符串的初值,但是字符串不是"123",而是"123\n",所
以该答案符合题意(即错误的);显然答案④也不符合题意(即正确的)。下面来分析答
案④为什么是正确的,该答案给出了数组长度为 4,赋初值时仅给前 3 个元素赋予字
符'1 '
、'2'、'3'
,第 4
个元素没有赋初值,按照 C 语言的规定,也有初值,且初值为空值,
对字符型数组来说,空值就是'\0',即字符率结束标记,所以数组 S 中存放的也是字符
串
"
123"
。
【
答
案
】
③
7 设 有 下 列 数 据 定 义 语 句 , 则 数 组 元 素 x 的 值 是 __________________ 。
int i
=
3
,
x[4]={ 1
,
2
,
3}
;
【分析】由于 i 的初值为 3,所以 x 就是 x[3]。由于数组的下标是从 0 开始的,所以 x[3]
实际上是数组 x 的第 4 个元素。从定义语句中可以看出数组 x 的前 3 个元素的初值依次为
1、2、3,第 4 个元素没有赋初值,其初值自动设为空值,对整型数组来说,空值是 0,
显
然
x[3
」
的
值
是
0.
【
答
案
】
0
8
设 有 下 列 数 据 定 义 语 句 , 则 puts ( & s[0][0] ) 的 输 出 结 果 是 __________ ;
puts
(
s[0]
〕
输
出
结
果
是
_____________
。
char s[4][5]={{'l' , ' \ 0'} , {"23"} , "345" , "4 \ 0"} ;
【分析】首先分析字符型数组 s 的初值,s 的第 1 行中存放的字符串是"1"、第 2 行中存放
的符串是"23"、第 3 行中存放的字符串是"345"、第 4 行中存放的字符串是"4"。puts()
函数的功能是输出从"参数"处开始存放的字符串中有效字符。按照上的分析,第 1 个输出
的结果是从"&S[0][0]"开始的字符串,这个地址对应的就是数 s 的第 1 行,所以输出结
果为 1;第 2
“
个输出的结果是从 s[]”开始的字符串,这个址对应的也是数组 s 的第 1 行,
所
以
输
出
结
果
也
为
1
。
【
答
案
】
1
1
9
设
有
下
列
数
据
定
义
语
句
:
char a[4][10]={"11"
,
"22"
,
"33"
,
"44"}
;
则
puts ( strcat ( a[1] , a[3] ) ) 的 输 出 结 果 是 ________________ ;
putS ( strcpy ( a[0] , a[2] ) ) 的 输 出 结 果 是 _ _______________ 。
【分析】字符数组 a 共有 4 行,每行存放一个字符串。这 4 行的首地址依次为:
a[0] 、 a[1] 、 a[2] 、 a[3] , 从 这 4 个 地 址 开 始 存 放 的 字 符 串 依 次
为:"11"、"22"、"33"、"44"。strcat(a[1],a[3])函数调用的功能是将 s[3]处的字符串
连接到 a[l]的字符串后面,所以执行该函数调用后的 a「l」处的字符串为"2244",而该函
数的返回值就是 a[1]的首地址,puts()函数的功能就是输出这个地址存放的字符串,
由此,第 1 个输出的结果就是:2244。同样理由可以分析 strcpy(a[0],a[2])的功能
是将 a[2]处的字符串("33")复制到 a[0]处,返回 a[0]的地址,puts()输出的就是
a[0]
处
的
字
符
串
,
结
果
为
:
33
。
【
答
案
】
2244
33