我有一个类似这样的类:
class Object {
public:
unsigned char data[8];
// other variables
// functions etc...
};
问题是 - 对象成员是否都相对于对象存储在同一内存位置?如果我有一个数组:Object array[3],给定一个 char 指针
char* data_ptr = array[0].data
,那么 data_ptr + (sizeof(Object))
是否总是指向 array[1].data?(我读过几个关于类和结构体数据成员之间可能存在填充的问答,但我认为它们没有回答我的问题。)谢谢!Ben
char*
可以用于通用数据,但是unsigned char*
或uint8_t
是原始字节访问的首选方法吗? - MartyEunsigned char+
或uint8_t
是更好的选择(因为在非二进制补码机器上,有两种零的表示方法)。但是更宽松的规则也适用于char
。在这种特殊情况下,不会发生原始字节访问;指针最终指向的数组再次成为char
数组。 - celtschk8
是因为你将成员data
定义为char data[8]
。也就是说,将 8 添加到array[0].data
将给出该成员数组的一过尾指针,这当然是允许的。添加任何更大的值意味着你离开了数组,这可能是未定义的行为(这意味着编译器在这种情况下可以做任何它想做的事情,因此如果你这样做,优化可能会出错)。 - celtschk