Trying to answer in the spirit of the question - If you change your C++ program to be like this they will be the same.
int a;
int main (void) {
printf ("%p\n", &a);
cout << &a << endl;
return 0;
}
The address will be the same which is after all, is all that matters!
The C++ code will pull in more libraries and start up code and C++ default static data (cout,cerr,cin,etc..) than the C code. So the address may get pushed higher into memory. Also the starting address of the application maybe set differently for C and C++ or indeed random. In Visual C++ preferences you can have a "Randomised Base Address" or a "Fixed Base Address" Setting these will move the int a address.