Passing by Reference
(address):
It is certainly possible to pass structures by value, which passes a copy
of the original structure to a function. The disadvantage to this process
is evident when dealing with large structures which will increase memory
requirements and slow the system down. Consequently, passing by reference is the most economical method of dealing with structures and functions.
The function will access the actual address locations of where the structures
are stored as opposed to working with copies of the structures.
//Sample Program using STRUCTURES and FUNCTIONS
...
//shows global nature of structure, passed by REFERENCE, use of ARRAY.
# include <iostream.h>
# include "apstring.cpp"
# include <apvector.h>
struct STUDENT_TYPE
{
apstring name, course;
double average, finalExam;
};
//function prototypes
STUDENT_TYPE get_student( );
void print_student(STUDENT_TYPE & pupil);
int main(void)
{
//declare the array of students
apvector <STUDENT_TYPE> list(10);
// input the list of students
for(int i = 0; i < 10; i++)
{
cout<<"Please enter information for
student " << i+1 << endl << endl;
list[ i ] = get_student( );
//use function to get individual info
}
// print the array of students
one struct at a time
for(int j = 0; j < 10; j++)
{
print_student(list [ j ] );
}
return 0;
}
//function to read in structure information (returns a structure)
STUDENT_TYPE get_student( )
{
STUDENT_TYPE pupil;
apstring dummy;
cout << "Enter the name (last name, first name): ";
getline( cin, pupil.name);
cout << "Enter the course name: ";
getline( cin, pupil.course);
cout << "Enter the course average: ";
cin>>pupil.average;
cout << "Enter the final exam grade: ";
cin>> pupil.finalExam;
getline(cin,dummy);
cout<<endl <<endl;
return pupil;
}
//function to print structure
void print_student(STUDENT_TYPE &pupil)
{
cout << "Name: " <<pupil.name<< endl;
cout << "Course: " <<pupil.course <<endl;
cout << "Average: " << pupil.average << endl;
cout << "Final Exam: " << pupil.finalExam << endl <<endl;
return;
}
|