c++ - 我可以获取数组的最后一个元素的地址吗?

标签 c++ arrays pointers undefined-behavior

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/

相关文章:

c++ - Eclipse CDT - 预编译 header

java - 在多维数组中设置字符串

java - Java中的指针逻辑

http - Golang 中的 "Invalid memory address"使用 ioutil.ReadAll()

c++ - 多重继承中的歧义

c++ - 在 C++(或 R)中翻转行尾

c++ - 如何从 C++ 函数返回 const Float**

arrays - DeepEqual 以不同方式对待用反勾初始化的数组?

c - 不输入我的人名功能。我放置函数和所有内容的方式是否符合逻辑?

C:查找数组中元素的数量[]