Компилятор помещает переменную, выделенную для стека, в другое место в разных версиях программы.
Попробуйте включить обе версии printf и cout в одну и ту же программу, чтобы они работали с одинаковым указателем. Тогда вы увидите, что две версии ведут себя одинаково.
int n = 44;
printf("n = %d \t &n = %x\n", n, &n);
cout<<"n ="<<n<< "\t" <<"&n ="<<hex<<int(&n)<<endl;
Как правильно указывает мистер Листер, вы должны использовать строку формата% p при печати указателей в printf.