C 整数是如何以四个内存地址存储在内存中的,即所有四个地址是如何以位填充的?
请解释为什么16777216或任何其他值出现在内存地址2686753。4字节的整数a存储在地址2686752..3,..4,..5C 整数是如何以四个内存地址存储在内存中的,即所有四个地址是如何以位填充的?,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
当您从地址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