Allocating and deleting a pointer
#include <iostream>
int main()
{
int localVariable = 5;
int * intPointer= &localVariable;
int * heapPointer = new int;
if (heapPointer == NULL)
{
std::cout << "Error! No memory for heapPointer!!";
return 1;
}
*heapPointer = 7;
std::cout << "localVariable: " << localVariable << "\n";
std::cout << "*intPointer: " << *intPointer << "\n";
std::cout << "*heapPointer: " << *heapPointer << "\n";
delete heapPointer;
heapPointer = new int;
if (heapPointer == NULL)
{
std::cout << "Error! No memory for heapPointer!!";
return 1;
}
*heapPointer = 9;
std::cout << "*heapPointer: " << *heapPointer << "\n";
delete heapPointer;
return 0;
}
localVariable: 5
*intPointer: 5
*heapPointer: 7
*heapPointer: 9
C++ program shows the use of pointers when accessing structure information from a function.
#include <iostream>
#define iSTRING15 15
#define iSTRING20 20
#define iNULL_CHAR 1
#define iMAX_BOATS 50
using namespace std;
int iinstock;
struct stboat {
char sztype [iSTRING15 + iNULL_CHAR];
char szmodel[iSTRING15 + iNULL_CHAR];
char sztitle[iSTRING20 + iNULL_CHAR];
char szcomment[80];
int iyear;
long int lmotor_hours;
float fretail;
float fwholesale;
};
void vprint_data(stboat *stany_boatptr);
int main(void)
{
int i;
char newline;
stboat astNineveh[iMAX_BOATS],*pastNineveh;
pastNineveh=&astNineveh[0];
cout << "How many boats in inventory? ";
cin >> iinstock;
for (i=0; i<iinstock; i++) {
cout << "\nPlease enter the make of the boat: ";
cin >> pastNineveh->sztype;
cout << "\nPlease enter the model of the boat: ";
cin >> pastNineveh->szmodel;
cout << "\nPlease enter the title number for the boat: ";
cin >> pastNineveh->sztitle;
cout << "\nPlease enter the model year for the boat: ";
cin >> pastNineveh->iyear;
cout << "\nPlease enter the current hours on "
<< "the motor for the boat: ";
cin >> pastNineveh->lmotor_hours;
cout << "\nPlease enter the retail price of the boat: ";
cin >> pastNineveh->fretail;
cout << "\nPlease enter the wholesale price of the boat: ";
cin >> pastNineveh->fwholesale;
cout << "\nPlease enter a one line comment about the boat: ";
cin.get(newline); // process carriage return
cin.get(pastNineveh->szcomment,80,".");
cin.get(newline); // process carriage return
pastNineveh++;
}
pastNineveh=&astNineveh[0];
vprint_data(pastNineveh);
return (0);
}
void vprint_data(stboat *stany_boatptr)
{
int i;
for (i=0; i<iinstock; i++) {
cout << "A " << stany_boatptr->iyear << " "
<< stany_boatptr->sztype << " "
<< stany_boatptr->szmodel << " beauty with "
<< stany_boatptr->lmotor_hours << " low hours.\n";
cout << stany_boatptr->szcomment << endl;
cout << "Grab the deal by asking your Nineveh "
<< "salesperson for #";
cout << stany_boatptr->sztitle << "ONLY! $"
<< stany_boatptr->fretail << "\n\n";
stany_boatptr++;
}
}
Finding Out What Is Stored in Pointers
#include <iostream>
int main()
{
using namespace std;
unsigned short int myAge = 5, yourAge = 10;
unsigned short int * pAge = &myAge;
cout << myAge << " " << yourAge << endl;
cout << &myAge << " " << &yourAge << endl;
cout << pAge << " " << *pAge << endl;
pAge = &yourAge;
cout << myAge << " " << yourAge << endl;
cout << &myAge << " " << &yourAge << endl;
cout << pAge << endl;
cout << *pAge << endl;
cout << " " << &pAge << endl;
return 0;
}
Manipulating Data by Using Pointers
#include <iostream>
typedef unsigned short int USHORT;
int main()
{
using namespace std;
USHORT myAge;
USHORT * pAge = 0;
myAge = 5;
cout << myAge << endl;
pAge = &myAge;
cout << "*pAge: " << *pAge << endl << endl;
*pAge = 7;
cout << *pAge << endl;
cout << myAge << endl << endl;
myAge = 9;
cout << myAge << endl;
cout << *pAge << endl;
return 0;
}
Manually create a call-by-reference using a pointer.
#include <iostream>
using namespace std;
void neg(int *i);
int main()
{
int x;
x = 10;
cout << x << " negated is ";
neg(&x);
cout << x << "\n";
return 0;
}
void neg(int *i)
{
*i = -*i;
}
Pointers to Derived Types
#include <iostream>
using namespace std;
class base {
int i;
public:
void set_i(int num) { i=num; }
int get_i() { return i; }
};
class derived: public base {
int j;
public:
void set_j(int num) { j=num; }
int get_j() { return j; }
};
int main()
{
base *bp;
derived d;
bp = &d; // base pointer points to derived object
// access derived object using base pointer
bp->set_i(10);
cout << bp->get_i() << " ";
return 0;
}
Using a pointer to print the contents of the array
#include <iostream>
const int ARRAY_LENGTH = 5;
using namespace std;
int main ()
{
int Numbers [ARRAY_LENGTH] = {0, 100, 200, 300, 400};
const int *pInt = Numbers;
for (int nIndex = 0; nIndex < ARRAY_LENGTH; ++ nIndex)
cout << "Element [" << nIndex << "] = " << *(pInt + nIndex) << endl;
return 0;
}
What is stored in a pointer.
#include <iostream>
int main()
{
unsigned short int intValue = 5, yourAge = 10;
unsigned short int * intPointer = &intValue; // a pointer
std::cout << "intValue:\t" << intValue;
std::cout << "\t\tyourAge:\t" << yourAge << "\n";
std::cout << "&intValue:\t" << &intValue;
std::cout << "\t&yourAge:\t" << &yourAge <<"\n";
std::cout << "intPointer:\t" << intPointer << "\n";
std::cout << "*intPointer:\t" << *intPointer << "\n\n";
intPointer = &yourAge; // reassign the pointer
std::cout << "intValue:\t" << intValue;
std::cout << "\t\tyourAge:\t" << yourAge << "\n";
std::cout << "&intValue:\t" << &intValue;
std::cout << "\t&yourAge:\t" << &yourAge <<"\n";
std::cout << "intPointer:\t" << intPointer << "\n";
std::cout << "*intPointer:\t" << *intPointer << "\n\n";
std::cout << "&intPointer:\t" << &intPointer << "\n";
return 0;
}
intValue: 5 yourAge: 10
&intValue: 0x22ff76 &yourAge: 0x22ff74
intPointer: 0x22ff76
*intPointer: 5
intValue: 5 yourAge: 10
&intValue: 0x22ff76 &yourAge: 0x22ff74
intPointer: 0x22ff74
*intPointer: 10
&intPointer: 0x22ff70