#include <iostream>
using namespace std;

void printGrades(int *arr, int size){
	cout<<"Grades: ";
	//Το *(arr+i) ειναι ακριβως το ιδιο με το arr[i]
	for(int i=0;i<size;i++){
		cout<<*(arr+i)<<" ";
	}
	cout<<endl;
}

//Χρηση δεικτη
void addBonusPointer(int *gradePtr, int bonus){
	*gradePtr=*gradePtr+bonus;
}

//Χρηση αναφορας
void addBonusReference(int &gradeRef, int bonus){
	gradeRef=gradeRef+bonus;
}

int main(){
	int grades[5]={5,6,7,8,4};
	int size=5;
	cout<<"---Απόδειξη 1ου Νόμου των Πινάκων---"<<endl;
	//Το όνομα του πίνακα είναι η διεύθυνση του πρώτου στοιχείου
	cout<<"Adress grades:   "<<grades<<endl;
	cout<<"Adress &grades[0]: "<<&grades[0]<<endl;
	cout<<"Are they the same? (1=Yes): "<<(grades==&grades[0])<<endl;
	cout<<"---Starting Grades---"<<endl;
	printGrades(grades,size);
	cout<<"\n---Adding Bonus---"<<endl;
	addBonusPointer(&grades[0],2);
	//Ή addBonusPointer(grades,2);
	cout<<"After the bonus to the first student: ";
	printGrades(grades,size);
	addBonusReference(grades[1],3);
	cout<<"After the bonus to the second student: ";
	printGrades(grades, size);
	cout<<"\n---Pointer Arithmetic---"<<endl;
	//Ο walker δειχνει στην αρχη του πινακα
	int *walker=grades;
	cout<<"The grades read by the pointer walker: "<<endl;
	for(int i=0;i<size;i++){
		cout<<"In the adress "<<walker<<" the value is "<<*walker<<endl;
		walker=walker+1;
	}
	return 0;


}
