关于结构的问题

沉默的牧羊者 2014-11-25 10:39:53
struct STU

{

int sn;

char name[20];

int score[3];

int average;

} students[5];

void main()

{

int i, j, t;

for(i=0; i < 5; i++)

{

cin>>students[i].sn;

cin>>students[i].name;

students[i].average = 0;

for(j=0; j< 3; j++)

{

cin>>students[i].score[j];

students[i].average += students[i].score[j];

}

students[i].average /= 3;

}
//下面是重点
STU *p[5];

for (i=0;i<5;i++)
{
p[i]=&students[i];
}

STU *m;

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

for(j=0; j<= 4-i; j++)

if(students[j].average < students[j+1].average)

{
m=p[j];

p[j]=p[j+1];

p[j+1]=m;

}
//重点在排序
cout<<"输出平均分在前3名的学生的姓名及平均分:"<<endl;

for(i=0; i < 3; i++)

{

cout<<p[i]->name<<" "<<p[i]->average<<endl;

}

}
STU *p[5];

for (i=0;i<5;i++)
{
p[i]=&students[i];
}

STU *m;

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

for(j=0; j<= 4-i; j++)

if(students[j].average < students[j+1].average)

{
m=p[j];

p[j]=p[j+1];

p[j+1]=m;

}
为什么上述方法得出的结果是错的,但是
STU *m;

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

for(j=0; j<= 4-i; j++)

if(p[j]->average < p[j+1]->average)

{
m=p[j];

p[j]=p[j+1];

p[j+1]=m;

}
这种方法得出的结果是对的。

students[j].average < students[j+1].average 和 p[j]->average < p[j+1]->average不是等价的吗??

...全文
135 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
粗略看了一眼,是这样的,如果你想让students[j] 和 p[j]等价,那么students和p就要指向同一块内存,或者这两个指向的内存地址要一样。 但是你在程序中使用了下面的代码 STU *p[5]; for (i=0;i<5;i++) { p[i]=&students[i]; } 具体我没细看你的程序,但我觉得这岂不是有点脱了裤子放屁? 为什么不用 p = students;?或者p = &students[0]; ?
沉默的牧羊者 2014-11-26
  • 打赏
  • 举报
回复
STU *p[5]; for (i=0;i<5;i++) { p[i]=&students[i]; } 设置这样的p[5],其实我是想设置一个辅助数组,也就是索引数组,然后如果想要直接替换结构的值就会用很多时间,对数组的操作就直接对相应的指向的地址的替换,我是这样想的。不知道我的想法是否有错。

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧