📜  门| Sudo GATE 2021的测验|问题19

📅  最后修改于: 2021-06-30 01:21:03             🧑  作者: Mango

考虑下面给出的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”是输出的字符串部分。
这个问题的测验