关于c语言指针的一个奇怪现象,该怎么解决

关于c语言指针的一个奇怪现象
代码:
int * p=(int *)0x0022ff44;
*p=123;
printf("%p\n",p);
printf("%d\n",*((int *)(0x0022ff44)));
运行结果:
000000007B
123
疑问:
预计p是0x0022ff44,为什么p的值是000000007B,代码只是修改的p指向的内存的值
(注:环境是win7+dev_cpp,编译器每次分配给变量的内存地址都一样,所以代码中的地址能合法的被访问)
本人初学c语言,望各位大神解释疑惑

------解决方案--------------------
指针本身地址和它指向的地址不要混淆
------解决方案--------------------
探讨
C/C++ code
int x = 5;


int *p=&x;
*p=123;


printf("x addres is:%p\n",&x);
printf("%%p is : %p\n",p);


这个的输出结果是一样的。 123的十六进制值刚好是7B。估计是编译器和环境不同的问题。我的……