#include <iostream> 
 
int  value1 =  1 ; 
int  value2 =  2 ; 
 
void  func1( int  * p)  { 
  p =  & value2; 
} 
 
void  func2( int  ** p)  { 
  * p =  & value2; 
} 
 
int  main( void )  { 
  std:: cout  <<  "The address of value1 is "  <<  & value1 <<  std:: endl ; 
  std:: cout  <<  "The address of value2 is "  <<  & value2 <<  std:: endl  <<  std:: endl ; 
 
  std:: cout  <<  "========== Case 1 =========="  <<  std:: endl ; 
  int  * ptr1 =  & value1; 
  int  * temp1 =  ptr1; 
  std:: cout  <<  "\t ptr1 = "  <<  ptr1 <<  std:: endl ; 
  func1( temp1) ; 
  std:: cout  <<  "\t ptr1 = "  <<  ptr1 <<  std:: endl  <<  std:: endl ; 
 
  std:: cout  <<  "========== Case 2 =========="  <<  std:: endl ; 
  int  * ptr2 =  & value1; 
  int  ** temp2 =  & ptr2; 
  std:: cout  <<  "\t ptr2 = "  <<  ptr2 <<  std:: endl ; 
  func2( temp2) ; 
  std:: cout  <<  "\t ptr2 = "  <<  ptr2 <<  std:: endl ; 
} 
I2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IHZhbHVlMSA9IDE7CmludCB2YWx1ZTIgPSAyOwoKdm9pZCBmdW5jMShpbnQgKnApIHsKICBwID0gJnZhbHVlMjsKfQoKdm9pZCBmdW5jMihpbnQgKipwKSB7CiAgKnAgPSAmdmFsdWUyOwp9CgppbnQgbWFpbih2b2lkKSB7CiAgc3RkOjpjb3V0IDw8ICJUaGUgYWRkcmVzcyBvZiB2YWx1ZTEgaXMgIiA8PCAmdmFsdWUxIDw8IHN0ZDo6ZW5kbDsKICBzdGQ6OmNvdXQgPDwgIlRoZSBhZGRyZXNzIG9mIHZhbHVlMiBpcyAiIDw8ICZ2YWx1ZTIgPDwgc3RkOjplbmRsIDw8IHN0ZDo6ZW5kbDsKCiAgc3RkOjpjb3V0IDw8ICI9PT09PT09PT09IENhc2UgMSA9PT09PT09PT09IiA8PCBzdGQ6OmVuZGw7CiAgaW50ICpwdHIxID0gJnZhbHVlMTsKICBpbnQgKnRlbXAxID0gcHRyMTsKICBzdGQ6OmNvdXQgPDwgIlx0cHRyMSA9ICIgPDwgcHRyMSA8PCBzdGQ6OmVuZGw7CiAgZnVuYzEodGVtcDEpOwogIHN0ZDo6Y291dCA8PCAiXHRwdHIxID0gIiA8PCBwdHIxIDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7CgogIHN0ZDo6Y291dCA8PCAiPT09PT09PT09PSBDYXNlIDIgPT09PT09PT09PSIgPDwgc3RkOjplbmRsOwogIGludCAqcHRyMiA9ICZ2YWx1ZTE7CiAgaW50ICoqdGVtcDIgPSAmcHRyMjsKICBzdGQ6OmNvdXQgPDwgIlx0cHRyMiA9ICIgPDwgcHRyMiA8PCBzdGQ6OmVuZGw7CiAgZnVuYzIodGVtcDIpOwogIHN0ZDo6Y291dCA8PCAiXHRwdHIyID0gIiA8PCBwdHIyIDw8IHN0ZDo6ZW5kbDsKfQ==