prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 6.17

Q这是一个巧妙的技巧:如果我写

	int realarray[10];
	int *array = &realarray[-1];
我可以把array当作是基于 1 的数组。


A虽然这种技术很有吸引力(并且在《C语言数值计算方法》的旧版本中使用过),但它并不严格符合C标准。指针算术的定义仅限于指针指向同一分配内存块的内部,或者指向其末尾的虚构的“终止”元素;否则,行为是未定义的,*即使该指针没有被解引用*。上面的代码计算了一个指向内存开头之前的内存的指针realarray,并且如果减去偏移量时生成了非法地址(可能是因为地址试图“环绕”到某个内存段的开头),则可能失败。

其他链接: “是的,弗吉尼亚”

参考文献: K&R2 第 5.3 节 第 100 页,第 5.4 节 第 102-3 页,第 A7.7 节 第 205-6 页
ISO 第 6.3.6 节
Rationale 第 3.2.2.3 节


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管