一个关于C语言结构的问题 谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/14 20:58:53
#include <stdio.h>
struct data
{
int morth;
int day;
int year;
};
struct stu
{
int num;
char *name;
char sex;
float score;
struct data birthday;
}a1;
void shuru(struct stu);
void main()
{
shuru(a1);
/*printf("%d,%s\n",a1.num,a1.name);
printf("%c,%.2f\n",a1.sex,a1.score);
printf("%d %d %d\n",a1.birthday.morth,a1.birthday.day,a1.birthday.year);*/

}
void shuru(struct stu a1)//奇怪为什么在函数中输入了就可以输出 但在主函数中输出的值就都是0?
{
scanf("%d",&a1.num);
fflush(stdin);
a1.name=(char *)malloc(sizeof(char)*20);//给指针动态分配读写空间
scanf("%s",a1.name);
fflush(stdin);
scanf("%c",&a1.sex);
scanf("%f",&a1.score);
scanf("%d%d%d",&a1.birthday.morth,&a1.birthday.day,&a1.birthday.year);
printf("%d,%s\n",a1.num,a1.name);
pr

这是一个,变量的生存周期的问题,再此题中,你定义了全局变量a1,有给了子函数一个同名形参a1,在子函数中他会优先考察形参,并把他作为唯一的操作数,因此全局变量a1一直都没有被改变,又因为你没有任何返回值,所以当你在主函数中对全局变量a1进行操作时,只是a1的初始值,所以你如果换一个参数,或索性不要参数,问题就得解了.