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