C ++确实存在?

时间:2011-05-14 11:52:09

标签: c++ arrays pointers

假设我在C ++中有以下内容:

char buffer[SIZE];
char * ptr = &buffer[SIZE];

其中ptr的值永远不会被解除引用。这样做C ++是否合法?那是使用从数组的最后一个元素开始的内存地址(比如作为要比较的特殊值)?

2 个答案:

答案 0 :(得分:10)

如果你说:

char buffer[SIZE];
char * ptr = & buffer[SIZE];

然后是的,这是合法的。 C ++标准特别允许您以这种方式使用数组的一个结尾,并且在(例如)使用迭代器时广泛使用它。

编辑:但请参阅litb和Steve Jessop的评论。如果你想完全正确,你可能想要:

char * ptr = buffer + SIZE;

无论哪种方式,一个接一个地址都是一个有效的地址 - 可能不太明确的问题(据我所知)是你是否被允许取消引用它。

答案 1 :(得分:6)

你的意思是&buffer[SIZE]?是的,它在C ++中是合法的。 ptr的值是缓冲区的一个结尾,大多数标准算法可以将它用作缓冲区的end()迭代器。