C语言选择题8,9题,求大神给个具体解答思路和解析,谢谢了,在线等。

如题所述

8. 假定 a 为一个整数类型的数组名,整数类型的长度为 2,则元素 a[4] 的地址比 a 数组的首地址大 8 个字节
解析:&a[4] 比 &a[0] 大 4 个元素的大小,而一个元素是 2 字节,所以 &a[4] - &a[0] == 8

9. 假定 s 被定义为指针类型 char * 的变量,初始指向的字符串为 "Hello world!",若要使变量 p 指向 s 所指向的字符串,则 p 应定义为 char *p = s;
解析:
B 选项中 char *p = &s;,该句无意义,由于 s 已经是一个 char * 变量了,再进行 & 操作符只会使它变为一个 char ** 的表达式,赋值到 p 中。
C 选项中 char *p; p = *s;,该句无意义,只是把一个 char 表达式强制转换成 char * 表达式赋值到 p 中。
D 选项中 char *p; p = &s;,同 B。
所以应选 A。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-03-11
第八题:a数组的首地址是a[0],a[4]的地址当然是a[4],因为题目告诉你了,整形类型的长度是 2,并且a[4]-a[0]=4,a[4]比a[0]大四个空间,注意是空间而不是字节数,所以要算字 节数的话要乘以它的长度,4x2=8,所以选D。
第九题:你要好好学学C语言的指针了,指针变量指向字符串用两种方式,一种就是A选项的指 针初始化,另一种就是先定义再赋值,比如说这个题目的另一种方式是: char *p;p=s;
希望能够帮到你追问

你怎么知道a[4]-a[0]=4?