c语言结构体关于栈溢出

#include
struct Student {
int num;
char name[20];
float score;
};
int main()
{
struct Student stu[4] = { {10101,"zhang",78},{10103,"wang",98.5},{10106,"li",86},{10108,"ling",73.5}
};
struct Student temp;
const int n = 4;//自定义常量n
int i, j,k;
printf("the order is:\n");
for (i = 0; i < n - 1; i++) {
k = i;
for (j = i + 1; j < n; j++)
if (stu[j].score > stu[i].score)
k = j;
temp = stu[k]; stu[k] = stu[i]; stu[i] = temp;
}
for (i = 0; i < n; i++)
printf("%6d%8s%6.2f\n", stu[i].num, stu[i].name, stu[i].score);
printf("\n");
return 0;
}
c语言利用结构体进行选择排序,为什么要引入一个变量k,我尝试了不使用k的情况会栈溢出,这是为什么,希望佬们可以给说一下

k用来保存stu[j].score > stu[i].score时候的j
你把k删了,那后面的stu[k] 里你填什么呢,j吗,可是这在j循环的外面,j现在是n呀,不越界了吗

你没有k的话,temp交换时的j就越界了啊。必须用k记录最大的score值对应的序号才行。否则for (j = i + 1; j < n; j++)循环结束,j就是n啦。temp = stu[j]的话,j数组越界