Possible Duplicate:
Take the address of a one-past-the-end array element via subscript: legal by the C++ Standard or not?
int array[10];
int* a = array + 10; // well-defined
int* b = &array[10]; // not sure...
最后一行是否有效?
最佳答案
是的,您可以将地址放在数组末尾之外,但您不能取消引用它。对于包含 10 个项目的数组,array+10
可以使用。 &array[10]
是否真的会导致未定义的行为(如果确实如此,是否真的应该),已经争论了几次(委员会等)。它的底线是,至少根据当前标准(C 和 C++),它正式导致未定义的行为,但如果有一个编译器实际上不起作用,那么任何论点中的任何人都无法找到或引用它。
编辑:有一次我的内存是正确的——这是(部分)官方Defect Report到委员会,并且至少一些委员会成员(例如,Tom Plum)认为措辞已经改变,因此它不会导致未定义的行为。 OTOH,DR 的日期是 2000 年,状态仍然是“正在起草”,所以它是否真的修复了,或者可能永远是有争议的(我还没有查看 N3090/3092 来弄清楚)。
然而,在 C99 中,这显然 不是未定义的行为。
关于c++ - 我可以获取数组的最后一个元素的地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3144904/