#include <iostream>
int * getInt1( int input)
{
int i = input;
std:: cout << "created 'i' at " << ( void * ) & i << std:: endl ;
int * ptr1 = & i;
return ptr1;
}
int * getInt2( int input)
{
int * ptr3 = new int ( input) ;
return ptr3;
}
int main( )
{
int i = 0 ;
std:: cout << "i is on the stack, it's address is " << ( void * ) & i << std:: endl ;
int * ip = new int ( 1 ) ;
std:: cout << "ip is on the heap, it's address is " << ( void * ) ip << std:: endl ;
int * p1 = NULL ;
int * p2 = NULL ;
int * p3 = NULL ;
// force the pointers to be assigned locations on the stack by printing them.
std:: cout << "created p1(" << & p1 << "), p2(" << & p2 << ") and p3(" << & p3 << ")" << std:: endl ;
p1 = getInt1( 10101 ) ;
std:: cout << "p1(" << & p1 << ") = " << ( void * ) p1 << " -> " << * p1 << std:: endl ;
p2 = getInt1( 20202 ) ;
std:: cout << "p2(" << & p2 << ") = " << ( void * ) p2 << " -> " << * p2 << std:: endl ;
// but more importantly
std:: cout << "p1(" << & p1 << ") = " << ( void * ) p1 << " -> " << * p1 << std:: endl ;
p3 = getInt2( 30303 ) ;
std:: cout << "p3(" << & p3 << ") = " << ( void * ) p3 << " -> " << * p3 << std:: endl ;
std:: cout << "p2(" << & p2 << ") = " << ( void * ) p2 << " -> " << * p2 << std:: endl ;
std:: cout << "p1(" << & p1 << ") = " << ( void * ) p1 << " -> " << * p1 << std:: endl ;
}
CSNpbmNsdWRlIDxpb3N0cmVhbT4KCglpbnQqIGdldEludDEoaW50IGlucHV0KQoJewoJCWludCBpID0gaW5wdXQ7CgkJc3RkOjpjb3V0IDw8ICJjcmVhdGVkICdpJyBhdCAiIDw8ICh2b2lkKikmaSA8PCBzdGQ6OmVuZGw7CgkJaW50KiBwdHIxID0gJmk7CgkJcmV0dXJuIHB0cjE7Cgl9CgoJaW50KiBnZXRJbnQyKGludCBpbnB1dCkKCXsKCQlpbnQqIHB0cjMgPSBuZXcgaW50KGlucHV0KTsKCQlyZXR1cm4gcHRyMzsKCX0KCglpbnQgbWFpbigpCgl7CgkJaW50IGkgPSAwOwoJCXN0ZDo6Y291dCA8PCAiaSBpcyBvbiB0aGUgc3RhY2ssIGl0J3MgYWRkcmVzcyBpcyAiIDw8ICh2b2lkKikmaSA8PCBzdGQ6OmVuZGw7CgkJaW50KiBpcCA9IG5ldyBpbnQoMSk7CgkJc3RkOjpjb3V0IDw8ICJpcCBpcyBvbiB0aGUgaGVhcCwgaXQncyBhZGRyZXNzIGlzICIgPDwgKHZvaWQqKWlwIDw8IHN0ZDo6ZW5kbDsKCgkJaW50KiBwMSA9IE5VTEw7CgkJaW50KiBwMiA9IE5VTEw7CgkJaW50KiBwMyA9IE5VTEw7CgkJLy8gZm9yY2UgdGhlIHBvaW50ZXJzIHRvIGJlIGFzc2lnbmVkIGxvY2F0aW9ucyBvbiB0aGUgc3RhY2sgYnkgcHJpbnRpbmcgdGhlbS4KCQlzdGQ6OmNvdXQgPDwgImNyZWF0ZWQgcDEoIiA8PCAmcDEgPDwgIiksIHAyKCIgPDwgJnAyIDw8ICIpIGFuZCBwMygiIDw8ICZwMyA8PCAiKSIgPDwgc3RkOjplbmRsOwoKCQlwMSA9IGdldEludDEoMTAxMDEpOwoJCXN0ZDo6Y291dCA8PCAicDEoIiA8PCAmcDEgPDwgIikgPSAiIDw8ICh2b2lkKilwMSA8PCAiIC0+ICIgPDwgKnAxIDw8IHN0ZDo6ZW5kbDsKCQkKCQlwMiA9IGdldEludDEoMjAyMDIpOwoJCXN0ZDo6Y291dCA8PCAicDIoIiA8PCAmcDIgPDwgIikgPSAiIDw8ICh2b2lkKilwMiA8PCAiIC0+ICIgPDwgKnAyIDw8IHN0ZDo6ZW5kbDsKCgkJLy8gYnV0IG1vcmUgaW1wb3J0YW50bHkKCQlzdGQ6OmNvdXQgPDwgInAxKCIgPDwgJnAxIDw8ICIpID0gIiA8PCAodm9pZCopcDEgPDwgIiAtPiAiIDw8ICpwMSA8PCBzdGQ6OmVuZGw7CgoJCXAzID0gZ2V0SW50MigzMDMwMyk7CgkJc3RkOjpjb3V0IDw8ICJwMygiIDw8ICZwMyA8PCAiKSA9ICIgPDwgKHZvaWQqKXAzIDw8ICIgLT4gIiA8PCAqcDMgPDwgc3RkOjplbmRsOwoJCXN0ZDo6Y291dCA8PCAicDIoIiA8PCAmcDIgPDwgIikgPSAiIDw8ICh2b2lkKilwMiA8PCAiIC0+ICIgPDwgKnAyIDw8IHN0ZDo6ZW5kbDsKCQlzdGQ6OmNvdXQgPDwgInAxKCIgPDwgJnAxIDw8ICIpID0gIiA8PCAodm9pZCopcDEgPDwgIiAtPiAiIDw8ICpwMSA8PCBzdGQ6OmVuZGw7Cgl9Cg==