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

📅  最后修改于: 2021-09-26 04:34:42             🧑  作者: 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)。

(一)迪拜
(二)桑海
(三) 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’ 是输出的字符串部分。
这个问题的测验