#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;

struct Multipass{
	string name; // e.g., "Leeloo Dallas"
	string id;  // e.g., "12345"
};

void swapMultipassArrayPosition(Multipass* passList, int source, int dest){
	Multipass tempPass;
	tempPass = *(passList + source); // pointer arithmetic for Leeloo's multipass
	*(passList + source) = *(passList + dest); //[0]=[1]
	*(passList + dest) = tempPass; //[1]= the value of tempPass
	return;
}

int main() {
	const int MAXLISTSIZE = 3;
	Multipass x,y,z; // create 3 multipasses
	x.name = "Leeloo Dallas";
	x.id = "12345";
	y.name = "Korben Dallas";
	y.id = "67890";
	z.name = "Jean-Baptiste Emanuel Zorg";
	z.id = "02468";

	// create the struct array
	Multipass passes[MAXLISTSIZE];
	passes[0] = x; // Korben
	passes[1] = y; // Leeloo
	passes[2] = z; // Zorg

	for(int i=0; i<MAXLISTSIZE; i++){
		cout << "passes[" << i << "]: "<< passes[i].name + ", " + passes[i].id << endl;
	}

	Multipass* passList_ptr = passes;
	cout << "passes[] is at address: " << &passes << endl;
	cout << "passes[0] is at address: " << &passes[0] << endl;
	cout << "passes[1] is at address: " << &passes[1] << endl;

	swapMultipassArrayPosition(passList_ptr, 0, 2);
	cout << "*** AFTER SWAP: ***" << endl;

	// should've changed places:
	for(int i=0; i<MAXLISTSIZE; i++){
		cout << "passes[" << i << "]: "<< passes[i].name + ", " + passes[i].id << endl;
	}

	swapMultipassArrayPosition(passList_ptr, 1, 2);
	cout << "*** AFTER SWAP: ***" << endl;

	// should've changed places:
	for(int i=0; i<MAXLISTSIZE; i++){
		cout << "passes[" << i << "]: "<< passes[i].name + ", " + passes[i].id << endl;
	}

	return 0;
}
