当sizeof(char)!= 1时,C中的字节精度指针算术

Mat*_*ner 1 c compiler-construction portability void-pointers pointer-arithmetic

如何以单字节精度可移植地执行指针运算?

请记住:

  • char 在所有平台上都不是1个字节
  • sizeof(void) == 1 仅作为GCC的扩展名提供
  • 虽然某些平台可能具有指针deref指针对齐限制,但算术仍可能需要比最小基本POD类型的大小更精细的粒度

caf*_*caf 19

你的假设是有缺陷的- sizeof(char)定义为1无处不在.

根据C99标准(TC3),在6.5.3.4节("尺寸操作员")中:

(第2段)

sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的带括号的名称.

(第3段)

当应用于具有char,unsigned char或signed char(或其限定版本)类型的操作数时,结果为1.

当这些结合在一起时,很明显在C中,无论char的大小是多少,该大小都是"字节"(即使在某个给定平台上超过8位).

char因此,A 是最小的可寻址类型.如果需要以小于a的单位进行寻址char,则唯一的选择是char一次读取一个并使用按位运算符来屏蔽所需的部分char.


Tim*_*son 6

sizeof(char)总是在C 和C++中返回1 .A char总是一个字节长.