【发布时间】:2013-07-13 00:26:00
【问题描述】:
假设我正在编写一个函数,该函数将float a[] 和一个偏移量写入此数组,并返回该偏移量处的元素。使用签名是否合理
float foo(float* a, off_t offset);
为了它?还是off_t 仅与字节偏移有关,而不是与任意元素大小的指针算术有关?即当偏移量是off_t 类型时说a[offset] 是否合理?
GNU C 库参考手册说:
off_t
This is a signed integer type used to represent file sizes.
但这并不能告诉我太多。
我的直觉是答案是否定的,因为在 a[offset] 中使用的实际地址是 a + sizeof(float) * offset 的地址,所以 "sizeof(float) * offset" 是一个@987654327 @ 和 sizeof(float) 是 size_t,两者都是带有“维度”的常量。
注意:偏移量可能为负数。
【问题讨论】:
-
很确定访问指针的负偏移量被认为是邪恶的。
-
@zneak:也许吧,我不打算这样做,但
a[-1]是完全有效的代码。 -
@zneak 一点也不。为什么会这样。
-
@JamesKanze:试着编译一下看看。
-
@einpoklum 当然可以编译。这并不能使它有效。如果
a被初始化为指向 C 样式数组的开头,则a[-1]无效,至少根据标准。
标签: c++ c types semantics offset