#include #include #include using namespace std; // swap these //typedef vector thetype; typedef long thetype; struct mystru { int a; thetype b; double c; }; void struacceptor( struct mystru stru ) { int diffa = ((int)&stru.b-(int)&stru.a); char ca = ( diffa < 0 ? '-' : '+' ); int diffb = ((int)&stru.c-(int)&stru.b); char cb = ( diffb < 0 ? '-' : '+' ); cout << "struA loc = " << &stru.a << " " << endl << "struB loc = " << &stru.b << " (A" << ca << "0x" << hex << ( diffa < 0 ? abs( diffa ) : diffa ) << ") " << endl << "struC loc = " << &stru.c << " (B" << cb << "0x" << hex << ( diffb < 0 ? abs( diffb ) : diffb ) << ") " << endl; } int myFunction( int a, thetype b, double c ) { int diffa = ((int)&b-(int)&a); char ca = ( diffa < 0 ? '-' : '+' ); int diffb = ((int)&c-(int)&b); char cb = ( diffb < 0 ? '-' : '+' ); cout << "A loc = " << &a << " " << endl << "B loc = " << &b << " (A" << ca << "0x" << hex << ( diffa < 0 ? abs( diffa ) : diffa ) << ") " << endl << "C loc = " << &c << " (B" << cb << "0x" << hex << ( diffb < 0 ? abs( diffb ) : diffb ) << ") " << endl << endl; cout << "A = " << a //<< " B = " << b << " C = " << c << endl; return 0; } int main( int argc, char *argv[] ) { vector b; b.push_back( 1 ); b.push_back( 2 ); b.push_back( 4566 ); // Change this from 5 to b if you're using vector type myFunction( 1, 5, 5.3 ); mystru stru; int diffa = ((int)&stru.b-(int)&stru.a); char ca = ( diffa < 0 ? '-' : '+' ); int diffb = ((int)&stru.c-(int)&stru.b); char cb = ( diffb < 0 ? '-' : '+' ); cout << "struA loc = " << &stru.a << " " << endl << "struB loc = " << &stru.b << " (A" << ca << "0x" << hex << ( diffa < 0 ? abs( diffa ) : diffa ) << ") " << endl << "struC loc = " << &stru.c << " (B" << cb << "0x" << hex << ( diffb < 0 ? abs( diffb ) : diffb ) << ") " << endl; stru.a = 3; //stru.b = 0x12345; stru.c = 5.3; //cout << "b loc = " << &(stru.b) << endl; struacceptor( stru ); typedef int (*fptr)( struct mystru ); fptr f = (fptr)( myFunction ); cout << "2nd call:" << endl; f( stru ); cout << "Call 2" << endl; return 0; }