I have these two almost identical bits of c++
#include <iostream>
using namespace std;
int main(){
    int a = 0;
    int b = 1;
    int c = 2;
    int d = 3;
    int *p = &a;
    cout << &c << endl;
    cout << *(p+1);
}
with the output:
0x7ffd7b16998c
2
and
#include <iostream>
using namespace std;
int main(){
    int a = 0;
    int b = 1;
    int c = 2;
    int d = 3;
    int *p = &a;
    cout << &d << endl;
    cout << *(p+1);
}
which produces the output:
0x7ffdb7ea105c
3
Why does the value of *(p+1) depend on what I output beforehand? If I delete the line
cout << &c << endl; 
completely i get the expected 1 as an output.
What on earth is happening?
 
     
    