#include <iostream>
#include <stdio.h>
#include <cstdint>
using namespace std;
void print_pvar( char name, int * pvalue) {
auto addr = reinterpret_cast < uintptr_t > ( pvalue) ;
auto paddr = reinterpret_cast < uintptr_t > ( & pvalue) ;
printf ( " %c value = %p, address = %p\n " , name, pvalue, paddr) ;
printf ( "*%c value = %d, address = %p\n " , name, * pvalue, addr) ;
}
void my_proc( int * b) {
print_pvar( 'b' , b) ;
* b = 7 ;
}
int main( ) {
int a = 5 ;
print_pvar( 'a' , & a) ;
my_proc( & a) ;
printf ( "after my_proc\n " ) ;
print_pvar( 'a' , & a) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPGNzdGRpbnQ+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBwcmludF9wdmFyKGNoYXIgbmFtZSwgaW50KiBwdmFsdWUpIHsKCWF1dG8gYWRkciAgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oIHB2YWx1ZSk7CglhdXRvIHBhZGRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KCZwdmFsdWUpOwoJcHJpbnRmKCIgJWMgdmFsdWUgPSAlcCwgYWRkcmVzcyA9ICVwXG4iLCBuYW1lLCAgcHZhbHVlLCBwYWRkcik7CglwcmludGYoIiolYyB2YWx1ZSA9ICVkLCBhZGRyZXNzID0gJXBcbiIsIG5hbWUsICpwdmFsdWUsICBhZGRyKTsKfQoKdm9pZCBteV9wcm9jKGludCogYikgewogICAgcHJpbnRfcHZhcignYicsIGIpOwogICAgKmIgPSA3Owp9CiAKaW50IG1haW4oKSB7CiAgICBpbnQgYSA9IDU7CiAgICBwcmludF9wdmFyKCdhJywgJmEpOwogICAgbXlfcHJvYygmYSk7CiAgICBwcmludGYoImFmdGVyIG15X3Byb2NcbiIpOwogICAgcHJpbnRfcHZhcignYScsICZhKTsKICAgIHJldHVybiAwOwp9
stdout
a value = 0x7fff87ddf99c, address = 0x7fff87ddf968
*a value = 5, address = 0x7fff87ddf99c
b value = 0x7fff87ddf99c, address = 0x7fff87ddf968
*b value = 5, address = 0x7fff87ddf99c
after my_proc
a value = 0x7fff87ddf99c, address = 0x7fff87ddf968
*a value = 7, address = 0x7fff87ddf99c