C++确实存在?

Tho*_*ing 3 c++ arrays pointers

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

char buffer[SIZE];
char * ptr = &buffer[SIZE];
Run Code Online (Sandbox Code Playgroud)

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

小智 10

如果你说:

char buffer[SIZE];
char * ptr = & buffer[SIZE];
Run Code Online (Sandbox Code Playgroud)

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

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

char * ptr = buffer + SIZE;
Run Code Online (Sandbox Code Playgroud)

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


Öö *_*iib 6

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