【发布时间】:2018-06-04 19:10:46
【问题描述】:
我正在努力更好地理解 C 标准。我特别感兴趣的是指针算法如何在不寻常的机器架构的实现中工作。
假设我有一个连接到 RAM 的 64 位宽寄存器的处理器,其中每个地址对应一个 4 位宽的单元。这台机器的 C 实现将 CHAR_BIT 定义为等于 8。假设我编译并执行以下代码行:
char *pointer = 0;
pointer = pointer + 1;
执行后,指针等于 1。这给人的印象是,通常 char 类型的数据对应于机器上最小的可寻址内存单元。
现在假设我有一个连接到 RAM 的 12 位宽寄存器的处理器,其中每个地址对应一个 4 位宽的单元。这台机器的 C 实现将 CHAR_BIT 定义为等于 12。假设为这台机器编译和执行相同的代码行。指针会等于 3 吗?
更一般地,当你增加一个指向 char 的指针时,地址是否等于 CHAR_BIT 除以机器上的内存单元的宽度?
【问题讨论】:
-
C表示sizeof char始终为一。 -
@Dschumanji
sizeof以sizeof(char)s 形式返回大小 -
@Dschumanji 是的,完全正确。
sizeof char始终为 1,即使在字符为 24 位宽的 24 位可寻址音频 DSP 上也是如此。 -
没有。它将
sizeof(char)定义为等于1。 -
对于
sizeof,标准规定“sizeof 运算符产生其操作数的大小(以字节为单位)......”然后“当 sizeof 应用于具有 char 类型的操作数时, unsigned char ,或 signed char ,(或其合格版本)结果为 1"。
标签: c pointers language-lawyer pointer-arithmetic