连续内存中间的值是什么神奇的东西?
#include <stdio.h>int main()
{
int z = 123;
int *pz = &z;
int x = pz ;
int *pa = x+1;
int *pb = x + 2;
int *pc = x + 3;
printf("%d\n", *pz);
printf("%d\n", *pa);
printf("%d\n", *pb);
printf("%d\n", *pc);
}
结果如下:
+ pz 0x0022f8f4 {123} int *
+ pa 0x0022f8f5 {-872415232} int *
+ pb 0x0022f8f6 {-859045888} int *
+ pc 0x0022f8f7 {-858993664} int *
我知道int是4个字节,PZ就是代表了123这个整型的地址,如果只是pz+1,那么内存地址就直接跳跃4,变成0x0022f8f4+5=0x0022f8f9,那我就好奇了,从123内存地址开始后的3个地址储存了什么东西?
于是我去访问了内存中123作为首地址后连续3个内存地址0x0022f8f(5~7)的值,结果是上面的-872415232、-859045888、-858993664,这些值代表了什么?有什么特殊的含义吗?是什么神奇的东西呢?
你要访问后面三个内存地址的东西,你用%c打印出来看呀,%d打印出来的东西它会以你给的地址开头,4个字节这么长的数据当成整数来输出实际上已经是越界了 如果编译器是把先声明的变量放在栈里的高地址空间,你这个就超出了这个函数里变量的地址空间了,没什么含义,栈里的垃圾数据
如果相反的,那就是下面的变量的数据了。 楼主用这个程序试试
#include <stdio.h>
int main()
{
int z = -2147483648;
int a = -2147483648;
int *pz = &a;
int x = pz ;
int *pa = x+1;
int *pb = x + 2;
int *pc = x + 3;
int *pd = x + 4;
&z,&x;
printf("%d\n", *pz);
printf("%d\n", *pa);
printf("%d\n", *pb);
printf("%d\n", *pc);
printf("%d\n", *pd);
return 0;
}
页:
[1]