C语言选择题求解答
有以下程序:structSTU{charname[10];intnum;floatTotalScore;};voidf(structSTU*p){structSTUs[2...
有以下程序:
struct STU
{ char name[10]; int num; float TotalScore; };
void f(struct STU *p){ struct STU s[2]={{"SunDan",20044,550},{"Penghua",20045,537}},*q=s;
++p; ++q; *p=*q;
}
main(){ struct STU s[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};
f(s);
printf("%s %d %3.0f\n",s[1].name, s[1].num,s[1].TotalScore);
}
程序运行后的输出结果是( )。
A) SunDan 20044 550
B) Penghua 20045 537
C) LiSiGuo 20042 580
D) SunDan 20041 703 展开
struct STU
{ char name[10]; int num; float TotalScore; };
void f(struct STU *p){ struct STU s[2]={{"SunDan",20044,550},{"Penghua",20045,537}},*q=s;
++p; ++q; *p=*q;
}
main(){ struct STU s[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};
f(s);
printf("%s %d %3.0f\n",s[1].name, s[1].num,s[1].TotalScore);
}
程序运行后的输出结果是( )。
A) SunDan 20044 550
B) Penghua 20045 537
C) LiSiGuo 20042 580
D) SunDan 20041 703 展开
7个回答
展开全部
选B,这个其实就是一个数组问题,别让他的结构体给迷惑了,子函数传进来的参数是地址类型的,所以子函数里传递的值改变了,主函数里传的值也跟着改变了,主函数里传的是主函数数组里的首地址,在子函数里,参数地址++,也就是编程第二位的地址,然后将子函数里的数组的第二位的值赋予传的参数,子函数的第二位的数值是"Penghua",20045,537,
所以传递个参数的数值就是这个,上面说了,这里面是传递的地址,所以穿的参数是会一起改变的,所以主函数的s[1]就变成"Penghua",20045,537这个了
所以传递个参数的数值就是这个,上面说了,这里面是传递的地址,所以穿的参数是会一起改变的,所以主函数的s[1]就变成"Penghua",20045,537这个了
展开全部
B
执行f(s)将s的首地址赋给*p
在f()函数中新建1个struct数组q指向这个数组的首地址
++q指向新建数组中第0+1个元素
++p指向传来数组的第0+1个元素
*p=*q
将{"Penghua",20045,537}赋给传入的struct数组的指定位置
即s[1]={"Penghua",20045,537}
所以结果是B
执行f(s)将s的首地址赋给*p
在f()函数中新建1个struct数组q指向这个数组的首地址
++q指向新建数组中第0+1个元素
++p指向传来数组的第0+1个元素
*p=*q
将{"Penghua",20045,537}赋给传入的struct数组的指定位置
即s[1]={"Penghua",20045,537}
所以结果是B
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
选择B
在函数f中,p指向的是主函数中的s,q指向的f函数中的f
然后两者都向后移动了一个结构体:++p; ++q;
于是这是p和q都指向了对应的s[1]所以,主函数的s[1]就应该等于f函数中的s[1]
在函数f中,p指向的是主函数中的s,q指向的f函数中的f
然后两者都向后移动了一个结构体:++p; ++q;
于是这是p和q都指向了对应的s[1]所以,主函数的s[1]就应该等于f函数中的s[1]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
B) Penghua 20045 537
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结果是B
B
B
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询