1) Draw a diagram showing what happens in memory after each statement.
double *ptr1, ptr2; double realNum = 1.234; ptr1 = new double; *ptr1 = 4.2; ptr2 = ptr1; *ptr2 = -4.09; if (*ptr1 == 4.2) cout << "Unchanged"; else cout < "Changed"; if ( ptr1 == ptr2) cout << "Equals"; else cout << "Not Equal"; prt2 = NULL; if (ptr1 != NULL) delete ptr1; ptr1 = &realNum;
2) Write a function to interchange pointers p and
r, so that after the function is performed p
will point to the item to which r formerly pointed, and
vice versa.
Reference C++ for You++, Litvin, pp.179-198:
struct node
{
int info;
node*next;
};
node*p;
Creating new nodes
p = new node;
Deleting of nodes
delete p;
The best time to use the new procedure is when you have some information to store into a node, not before. Pointers may be declared in variable declarations, but do not point to any information until new. Likewise delete frees the memory location, and does require a new declaration for use again.
3) Draw a diagram showing the situation in memory after execution of each of the statements in the following program that performs a series of demonstrations.
#include <iostream.h>
#include "apstring.h"
struct node
{
apstring info;
node *next;
};
int main( )
{
node *A, *B;
A = new node;
B = new node;
B -> info = "Sosa";
B -> next = NULL;
A -> info = "McGwire";
A -> next = B;
cout << A->next->info;
delete B;
delete A;
return 0;
}