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

📅  最后修改于: 2021-09-24 06:05:15             🧑  作者: 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;
}

程序产生的输出是什么?
(一) AB
紫外线
大众
大众
(二) AB
紫外线
AB
大众
(C) AB
紫外线
紫外线
大众
(四) AB
紫外线
大众
紫外线答案:(乙)
解释:

结构 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
这个问题的测验