代码在32位中成功运行,却在64位中报错

请教各位,这串代码在x86中打印出20000000,但在x64中却报错了?为什么呢

#include
int main(void)
{
int a[4] = { 1,2,3,4 };
int* ptr2 = (int*)((int)a + 1);
printf("%x",*ptr2);

return 0;

}

报错什么,我看看https://img-mid.csdnimg.cn/release/static/image/mid/ask/659823504866167.png?x-oss-process=image/auto-orient,1/resize,w_320,m_lfit)

img


把这个取消了

img

改成这样的试试


#include <stdio.h>

int main()
{
    int a[4] = {1, 2, 3, 4};
    int *ptr2 = (int*)((long)a + 1);

    printf("%x\n", *ptr2);

    return 0;
}