考虑下面给出的 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)。
(一)迪拜
(二)桑海
(三) 2-3
(四) 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) 指向“Sanghai”。
在第二个打印语句中
s3-s2 = 2008 - 2000 / 4(size of the data type) = 2
*s3 - s1= 1012-1000/4 = 3
所以,给定的 C 程序的输出是:我喜欢每年访问 Sanghai 2-3 次。
因此,’Sanghai’ 和 ‘2-3’ 是输出的字符串部分。
这个问题的测验