2 道结构体的题

来源:百度知道 编辑:UC知道 时间:2024/09/21 08:23:25
有以下程序
# include
struct STU
{ int num;
float TotalScore; };
void f(struct STU p)
{ struct STU s[2]={{20044,550},{20045,537}};
p.num = s[1].num; p.TotalScore = s[1].TotalScore;
}
main()
{ struct STU s[2]={{20041,703},{20042,580}};
f(s[0]);
printf("%d %3.0f\n", s[0].num, s[0].TotalScore);
}
程序运行后的输出结果是
A)20045 537 B)20044 550 C)20042 580 D)20041 703
f(s[0]);不是单向的值传递么,为什么主函数的值也改变了(答案是D)

有以下程序
# include
struct STU
{ char name[10];
int num; };
void f(char *name, int num)
{ struct STU s[2]={{"SunDan",20044},{"Penghua",20045}};
num = s[0].num;
strcpy(name, s[0].name);
}
main()
{ struct STU s[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;
p=&s[1]; f(p->name, p->num);
printf("%s %d\n", p->name, p->num);
}
程序运行后的输出结果是
A)SunDan 20042 B)SunDan 20044

第一个,就是值传递,所以没有改变,s[0]本身就是20041,703,所以执行了f(s[0])后没有任何改变,所以选d,对着啊,你说主函数的值也改变了,我没看懂什么意思,答案d不就是以前的S[0]吗

第二个题目,name是char*型的指针,所以不是值传递,而num是int型的,是值传递.所以执行了f()之后,num没有变动,name变了.