#include <stdio.h>
void function1( int * ) ; // so the compiler knows what the function looks like.
void function2( int * ) ;
int main( ) {
int varInMain = 0 ; // lets call it something distinct
printf ( "varInMain starts with %d, it's location in memory is %p.\n " , varInMain, & varInMain) ;
function1( & varInMain) ;
printf ( "varInMain is %d after calling function1.\n " , varInMain
) ;
return 0 ;
}
void function1( int * func1ptr) {
printf ( "function1: func1ptr points to memory location %p, which contains %d.\n " , func1ptr, * func1ptr) ;
* func1ptr = 1010 ;
function2( func1ptr) ;
}
void function2( int * func2ptr) {
printf ( "function2: func2ptr points to memory location %p, which contains %d.\n " , func2ptr, * func2ptr) ;
* func2ptr = 123 ;
}
ICAgICNpbmNsdWRlIDxzdGRpby5oPgoKICAgIHZvaWQgZnVuY3Rpb24xKGludCopOyAvLyBzbyB0aGUgY29tcGlsZXIga25vd3Mgd2hhdCB0aGUgZnVuY3Rpb24gbG9va3MgbGlrZS4KICAgIHZvaWQgZnVuY3Rpb24yKGludCopOwoKICAgIGludCBtYWluKCkgewogICAgICAgIGludCB2YXJJbk1haW4gPSAwOyAvLyBsZXRzIGNhbGwgaXQgc29tZXRoaW5nIGRpc3RpbmN0CiAgICAgICAgcHJpbnRmKCJ2YXJJbk1haW4gc3RhcnRzIHdpdGggJWQsIGl0J3MgbG9jYXRpb24gaW4gbWVtb3J5IGlzICVwLlxuIiwKICAgICAgICAgICAgICAgIHZhckluTWFpbiwgJnZhckluTWFpbik7CgogICAgICAgIGZ1bmN0aW9uMSgmdmFySW5NYWluKTsKCiAgICAgICAgcHJpbnRmKCJ2YXJJbk1haW4gaXMgJWQgYWZ0ZXIgY2FsbGluZyBmdW5jdGlvbjEuXG4iLCB2YXJJbk1haW4pOwogICAgICAgIAogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHZvaWQgZnVuY3Rpb24xKGludCogZnVuYzFwdHIpIHsKICAgICAgICBwcmludGYoImZ1bmN0aW9uMTogZnVuYzFwdHIgcG9pbnRzIHRvIG1lbW9yeSBsb2NhdGlvbiAlcCwgd2hpY2ggY29udGFpbnMgJWQuXG4iLAogICAgICAgICAgICAgICAgIGZ1bmMxcHRyLCAqZnVuYzFwdHIpOwogICAgICAgICpmdW5jMXB0ciA9IDEwMTA7CiAgICAgICAgZnVuY3Rpb24yKGZ1bmMxcHRyKTsKICAgIH0KCiAgICB2b2lkIGZ1bmN0aW9uMihpbnQqIGZ1bmMycHRyKSB7CiAgICAgICAgcHJpbnRmKCJmdW5jdGlvbjI6IGZ1bmMycHRyIHBvaW50cyB0byBtZW1vcnkgbG9jYXRpb24gJXAsIHdoaWNoIGNvbnRhaW5zICVkLlxuIiwKICAgICAgICAgICAgICAgICBmdW5jMnB0ciwgKmZ1bmMycHRyKTsKICAgICAgICAqZnVuYzJwdHIgPSAxMjM7CiAgICB9Cg==