Well, you are right that you can't compare structures like that unless you overload the comparison operators. But in fact you aren't comparing the structures, you are comparing the name member of the the structure.

Second, I'm not sure where you read that you can't copy one structure to another, because as far as I know you can. When you are swapping them with the pointer, its the same thing as saying:

temp = records[i];
records[i]= records[j];
records[j]= temp;

To print out the information, you need to print out each member:

cout<<records[i].name<<" "<<records[i].course<<" "<<records[i].age<<endl;