考虑以下 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
这个问题的测验