假设我在C ++中有以下内容:
char buffer[SIZE];
char * ptr = &buffer[SIZE];
其中ptr
的值永远不会被解除引用。这样做C ++是否合法?那是使用从数组的最后一个元素开始的内存地址(比如作为要比较的特殊值)?
答案 0 :(得分:10)
如果你说:
char buffer[SIZE];
char * ptr = & buffer[SIZE];
然后是的,这是合法的。 C ++标准特别允许您以这种方式使用数组的一个结尾,并且在(例如)使用迭代器时广泛使用它。
编辑:但请参阅litb和Steve Jessop的评论。如果你想完全正确,你可能想要:
char * ptr = buffer + SIZE;
无论哪种方式,一个接一个地址都是一个有效的地址 - 可能不太明确的问题(据我所知)是你是否被允许取消引用它。
答案 1 :(得分:6)
你的意思是&buffer[SIZE]
?是的,它在C ++中是合法的。 ptr的值是缓冲区的一个结尾,大多数标准算法可以将它用作缓冲区的end()迭代器。