C 整数是如何以四个内存地址存储在内存中的,即所有四个地址是如何以位填充的?

C 整数是如何以四个内存地址存储在内存中的,即所有四个地址是如何以位填充的?,c,C,请解释为什么16777216或任何其他值出现在内存地址2686753。4字节的整数a存储在地址2686752..3,..4,..5 当您从地址2686753读取时,您还读取接下来的三个字节..4、..5、..6。最后一个字节包含垃圾,将导致输出显示为随机。因为主机上的数组字节布局似乎是00,01,00,02,00 00。将这个移到左边,得到00 01,…,表示0x01000000或16777216 看起来代码正在执行非对齐访问。可能不可移植。请解释在程序执行之前,您是如何得到这个值2686753

请解释为什么16777216或任何其他值出现在内存地址2686753。

4字节的整数a存储在地址2686752..3,..4,..5


当您从地址2686753读取时,您还读取接下来的三个字节..4、..5、..6。最后一个字节包含垃圾,将导致输出显示为随机。

因为主机上的数组字节布局似乎是00,01,00,02,00 00。将这个移到左边,得到00 01,…,表示0x01000000或16777216

看起来代码正在执行非对齐访问。可能不可移植。

请解释在程序执行之前,您是如何得到这个值2686753的,这样您就用它硬编码了指针ss??很抱歉,现在请回答这个不清楚。答案很简单,在你的平台上,int的大小是4字节?我不确定这个问题是否足够具体,可以详细说明。我会选一本书,在问那么多问题之前先问一些实际问题。
#include<stdio.h>
int main()
{
    int a[3]={0,1,2};
    printf("%d\n%d\n%d\n\n\n",&a[0],&a[1],&a[2]);
    int i;
    printf("%d  %d\n",a,*(a));
    int * ss=(int *)2686753;
    printf("%d  %d\n",ss,*(ss));
    return 0;
}
2686752
2686756
2686760


2686752  0
2686753  16777216