#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==