考虑下面给出的C程序。
#include
#include
int main()
{
char *s1[]={"Dubai","Singapore","Paris","Sanghai","HongKong"};
char **s2[]={(s1+2),(s1+1),(s1+3),(s1+4),(s1+0)};
char ***s3=s2;
char str1[]="I love to visit ";
char str2[]="times every year.";
s3++;
printf("%s",str1);
printf("%s ",**++s3);
printf("%d-%d ",s3-s2,*s3-s1);
printf("%s",str2);
return 0;
}
以下哪个字符串是上述C程序的输出的一部分?
注–该问题是多项选择题(MSQ)。
(A)迪拜
(B)上海
(C) 2-3
(D) 3-4答案: (B) (C)
说明:让
基地址s1 = 1000
基地址s2 = 2000
s1指针数组包含字符串的基地址。
s2 = 1000双指针数组包含指针数组s1的地址。
s3 = 2000三元指针包含地址数组s2的基地址。
s3 ++表示将下一个索引值加4,即2000 + 4 = 2004
在第一份印刷声明中
** ++ s3再次将s3增加到2008。
在2008年(s2)包含s1 + 3,而(s1 + 3)指向“上海”。
在第二份印刷声明中
s3-s2 = 2008 - 2000 / 4(size of the data type) = 2
*s3 - s1= 1012-1000/4 = 3
因此,给定的C程序的输出是:我喜欢每年2-3次访问上海。
因此,“ Sanghai”和“ 2-3”是输出的字符串部分。
这个问题的测验