Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 内存地址和数据类型简介_C_Memory Address - Fatal编程技术网

C 内存地址和数据类型简介

C 内存地址和数据类型简介,c,memory-address,C,Memory Address,我读了一些关于C语言的内存地址和数据类型的论文,我已经很好地掌握了内容,但是我偶然发现了一些数学知识,我似乎在互联网上的任何地方都搞不懂 假设我创建了两个局部变量 void foo(void){ int i, j; printf("int i is stored in %p\n", &i); printf("int j is stored in %p\n", &j); } 我得到的输出是 int i is stored in 0x6ffc88 int j

我读了一些关于C语言的内存地址和数据类型的论文,我已经很好地掌握了内容,但是我偶然发现了一些数学知识,我似乎在互联网上的任何地方都搞不懂

假设我创建了两个局部变量

void foo(void){
    int i, j;
    printf("int i is stored in %p\n", &i);
    printf("int j is stored in %p\n", &j);
}
我得到的输出是

int i is stored in 0x6ffc88
int j is stored in 0x6ffc84
在我阅读的文本中,一个整数的大小是4字节(与我的计算机相同)。因此,
inti
应该分配4个字节。但是
inti
intj
的内存地址之间的差异只有4位(
0100

差异不是意味着更大,比如4个字节(
0xffffffff


请问我在哪里制造混乱

j位于字节地址0x6ffc84,0x6ffc85,0x6ffc86,0x6ffc87处,因此为32位

i位于字节地址0x6ffc88、0x6ffc89、0x6ffc8a、0x6ffc8b处,因此为32位


除了8051这样的微控制器恐怖事件外,现代的非平凡处理器体系结构没有位可寻址存储器。

“int i和int j的存储器地址之间的差异仅为4位”-不,这些是字节地址。地址是字节地址。C不允许位寻址。大多数CPU是字节可寻址的。C可以与CPU对话并请求以字节而不是位执行的内存读/写操作。使用C,我们至少可以逐字节读取/写入内存位置,尽管在读取并将其放入整数变量后,我们可以在大多数现代32位和64位平台上使用这些>>对其进行位操作
int
为32位。即四个字节。