47、有以下程序 struct STU { char name[10]; int num; int Score; }; main( ) { struct STU s[5]={{"Yang

47、有以下程序 struct STU { char name[10]; int num; int Score; }; main( ) { struct STU s[5]={{"Yang,第1张

for(i=0i<5i++) p[i]=&s[i]//将数据地址分别赋值给指针数组

for(i=0i<4i++)

for(j=i+1j<5j++)

if(p[i]->Score>p[j]->Score)

{ t=p[i]p[i]=p[j]p[j]=t} /×这段代码是用于按分数将数组指针的值按分数从小到大顺序排列,排列之后的指针分别指向p[0]=&s[4] p[1]=&s[3] p[2]=&s[1] p[3]=&s[2] p[4]=&s[0] ×/

printf("5d %d\n",s[1].Score,p[1]->Score)// 所以足后输出相当于s[1].score和s[3].score的值了

好好看一下函数那一章节中的形参和实参的区别。

第一个:将结构体a传入到f函数里,虽然代码上感觉好像a变了,其实在此函数里,代码传递靠的是值传递,也就是说: f函数在内存中重新分配了一个struct A类型的结构体,我们暂且叫它strcut A tmp,struct A tmp与struct A a是两个不同的函数,占用的是不同的内存,但是它们中的各成员体的值是相同的。我们接着再看f执行了t.a=1002strcpy(t.b,"ChangRong")t.c=1202.0这三句命令,但是这三句只是改变strcut A tmp 这个结构体的值,并没有改变strcut A a 这个结构体的值!(关键还是内存地址不同)。所以第一个答案还是A

第二个:f函数与我上述内容一致,但是在f函数退出之前,返回了strcut A 类型的t结构体, 这相当于将我上述的strcut A tmp 改变后的值保存了下来,然后在main函数中用同类型的struct A a 来等于这个结构体,因此结果是改变值后的D选项。

你有空在看看指针,多理解,相信你会懂得的。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12068553.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存