📜  门| GATE-IT-2004 |第61章

📅  最后修改于: 2021-06-29 00:53:13             🧑  作者: Mango

考虑下面的C程序:

#include 
typedef struct 
{
    char *a;
    char *b;
} t;
void f1(t s);
void f2(t *p);
main()
{
    static t s = {"A", "B"};
    printf ("%s %s\n", s.a, s.b);
    f1(s);
    printf ("%s %s\n", s.a, s.b);
    f2(&s);
}
void f1(t s)
{
    s.a = "U";
    s.b = "V";
    printf ("%s %s\n", s.a, s.b);
    return;
}
void f2(t *p)
{
    p -> a  = "V";
    p -> b = "W";
    printf("%s %s\n", p -> a, p -> b);
    return;
}

程序生成的输出是什么?
(A) AB
紫外线
大众汽车
大众汽车
(B) AB
紫外线
AB
大众汽车
(C) AB
紫外线
紫外线
大众汽车
(D) AB
紫外线
大众汽车
紫外线答案: (B)
解释:

结构s的值通过f1()中的值传递。在f2()中,传递s的地址。因此,对f1()所做的任何更改都不会反映在main()中,但是会反映在f2()中的更改。

 printf(“%S%S \ n”个,S A,S B。); //打印a和b的局部静态值; AB

f1 ( s );给呼叫对printf(“%S%S \ n”个,S A,S B。); //打印a和b的局部值; UV

printf(“%S%S \ n”个,S A,S B。); //打印a和b的局部静态值; AB

f2 (& s );-> printf ( “%s%s \ n” p- > a p- > b ); //在内存位置即UV给出当前内容

因此答案是B请参阅以下网址的代码解决方案:https://ide.geeksforgeeks.org/q36urV
这个问题的测验