鱼C论坛

 找回密码
 立即注册
查看: 2579|回复: 3

连续内存中间的值是什么神奇的东西?

[复制链接]
发表于 2019-8-15 10:54:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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,这些值代表了什么?有什么特殊的含义吗?是什么神奇的东西呢?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-15 11:36:54 | 显示全部楼层
你要访问后面三个内存地址的东西,你用%c打印出来看呀,%d打印出来的东西它会以你给的地址开头,4个字节这么长的数据当成整数来输出  实际上已经是越界了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-15 12:11:13 | 显示全部楼层
如果编译器是把先声明的变量放在栈里的高地址空间,你这个就超出了这个函数里变量的地址空间了,没什么含义,栈里的垃圾数据
如果相反的,那就是下面的变量的数据了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-15 14:20:48 | 显示全部楼层
楼主用这个程序试试
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 16:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表