C语言 如何创建内存地址

fdbelqdn  于 2023-10-16  发布在  其他
关注(0)|答案(2)|浏览(126)

我对内存地址有点困惑,据我所知,每个内存地址的大小为1字节(8位),每个内存地址都有自己的十六进制地址0x122.,现在当我们存储一个32位的int,需要4个字节,现在计算机合并每个1字节地址(0x123,0x124..)组成一个新的4字节地址。

smtd7mpg

smtd7mpg1#

内存地址本身就是一个字节的位置。要访问超过一个字节的对象,我们同时使用地址和 * 类型 *。
要指定多个字节的对象的地址,我们使用第一个字节的地址。
在C语言中,一个对象的字节数可以从它的类型中得知。C语言的语义被指定为所有引用一个对象的表达式都有一个类型,并且从该类型可以知道要访问多少字节。

bvn4nwqk

bvn4nwqk2#

一张照片可能会有帮助。假设一个4字节整数0x01234567。给定起始地址0x1000,它将被存储为

Little-endian        Big-endian
-------------        ----------
              +----+
      0x1000: | 67 | :0x1003
              +----+
      0x1001: | 45 | :0x1002
              +----+
      0x1002: | 23 | :0x1001
              +----+
      0x1003: | 01 | :0x1000
              +----+

每个字节仍然有一个唯一的地址。在little-endian系统中,最低有效字节是寻址字节,而在big-endian系统中,最高有效字节是寻址字节。
如果你有第二个整数0x89abcdef,它可以被布局为

Little-endian        Big-endian
-------------        ----------
              +----+
      0x1000: | 67 | :0x1003
              +----+
      0x1001: | 45 | :0x1002
              +----+
      0x1002: | 23 | :0x1001
              +----+
      0x1003: | 01 | :0x1000
              +----+
      0x1004: | ef | :0x0FFF
              +----+
      0x1005: | cd | :0x0FFE
              +----+
      0x1006: | ab | :0x0FFD
              +----+
      0x1007: | 89 | :0x0FFC
              +----+

两个对象的起始地址相隔4个字节--在little-endian布局中为0x10000x1004,在big-endian布局中为0x0FFC0x1000

相关问题