void inputarr(STUDENT s[ ], int n) {
成都创新互联公司主要从事网站制作、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务大冶,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
int i;
for(i = 0; i n; ++i) {
printf("输入第%d个学生的信息:\n",i + 1);
printf("学号:");
scanf("%d",s[i].num);
printf("姓名:");
scanf("%s",s[i].name);
printf("性别:");
scanf("%s",s[i].sex);
printf("成绩:");
scanf("%f",s[i].score);
printf("出生日期: xxxx:xx:xx :");
scanf("%d:%d:%d",s[i].birthday.year,s[i].birthday.month,s[i].birthday.day);
}
}
void outputarr(STUDENT s[ ], int n) {
int i;
for(i = 0; i n; ++i) {
printf("%d %s %s [%04d:%02d:%02d] %.2lf\n",s[i].num,s[i].name,s[i].sex);
printf("[%04d:%02d:%02d] %.2lf\n",s[i].birthday.year,s[i].birthday.month,s[i].birthday.day,s[i].score);
}
printf("\n");
}
STU f (STU a)
{ STU b={"Zhao", 'm', 85, 90};
int i;
strcpy( a.name, b.name );
a.sex = b.sex;
for ( i=0; i2; i++ ) a.score[i] = b.score[i];
以上是将b中的数据赋值给a,相当于a=b;这样的一个操作
return a;
}
main()
{ STU c= { "Qian", 'f', 95, 92 }, d;
d = f(c);//这里传的c是个复制品(传递的不是结构体指针),所以c不会变,d接收f()函数的返回值,因为返回值的内容是f()中的b的值,所以,d与c不同
printf ("%s,%c,%d,%d, ", d.name, d.sex, d.score[0], d.score[1]);
printf ("%s,%c,%d,%d\n", c.name, c.sex, c.score[0], c.score[1]);
}
输出结果为:A) Zhao,m,85,90, Qian,f,95,92
sub1是传值调用,所以在sub1中对参数的修改,不影响实参a,
打印实参a的值还是初始化值。
sub2传递数组,本质上为传指针,所以在sub2中对参数修改,同步影响实参b。
所以打印b是修改后的值。
第一题中的name为什么是sundan
第一题中的num为什么该值:()
注意了,压根没有使用f的返回值,f也没有返回值(void)
第二题(不再画图了),main中的s[0]与f中的p压根是两个内存区域(当然了,传参数时,将s[0]内存区域的内容拷贝到了p内存区域),所以显然,在f中修改内存区域p,自然不会影响main中的内存区域s[0],因此s[0]亦然保持本来的值。(即20041, 703)