使用指针交换结构

假设我们有如下结构:

struct EMPLOYEE{ int EmpID; int Sal; } Stu[5]; 

如果满足以下条件,我们希望交换这些结构:

Stu[i].Sal < Stu[0].Sal

一种方法是通过交换整个结构。 像这样的东西:

 TempStu.Sal = Stu[i].Sal; Stu[i].Sal = Stu[0].Sal; Stu[0].Sal = TempStu.Sal; TempStu.EmpID = Stu[i].EmpID; Stu[i].EmpID = Stu[0].EmpID; Stu[0].EmpID = Temp.Stu.EmpID; 

这使得它成为一种非常耗时的方法。 其他方法可能是使用指向EMPLOYEE结构的指针数组,然后只对这些指针进行排序。 我无法弄清楚如何做到这一点。

这是我做的一个开始..

 EMPLOYEE *St[5]; for(int j=0; j<5; j++) { St[j] = &Stu[j]; } if(Stu[i].Sal < Stu[0].Sal) swap(St[i],St[0]); void swap(EMPLOYEE *A, EMPLOYEE *B) { EMPLOYEE temp = *A; *A = *B; *B = temp; } 

这是正确的方法吗?

这是正确的方法吗?

几乎。 在swap() ,您需要使用指针指针(或指向C ++中的指针)。 否则,您对AB所做的更改不会传播回调用方。

你的想法是正确的,但你的function只交换了两个本地指针。

试试这个

 if(Stu[i].Sal < Stu[0].Sal) swap(&St[i],&St[0]);//pass the addresses void swap(EMPLOYEE **A, EMPLOYEE **B) { EMPLOYEE *temp = *A; *A = *B; *B = temp; } 

试试这个:

 void swap(EMPLOYEE* arr[],int i,int j) { EMPLOYEE* temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } if (Stu[i].Sal < Stu[0].Sal) swap(Stu,i,0);