C ++ адрес существует? - PullRequest
3 голосов
/ 14 мая 2011

Предположим, у меня есть следующее в C ++:

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

, где значение ptr никогда не разыменовывается.Это даже законно делать C ++?То есть использовать адрес памяти на расстоянии одного шага от последнего элемента массива (скажем, в качестве специального значения для сравнения)?

Ответы [ 2 ]

10 голосов
/ 14 мая 2011

Если вы сказали:

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

тогда да, это законно. В соответствии со стандартом C ++ вам, таким образом, разрешено использовать массив один за другим, и он широко используется при (например) работе с итераторами.

Редактировать: Но посмотрите комментарии Литба и Стива Джессопа. Если вы хотите быть полностью политически корректным, вы, вероятно, хотите:

char * ptr = buffer + SIZE;

В любом случае, адрес «один за другим» является действительным адресом - возможно, не совсем ясный вопрос (насколько я понимаю) заключается в том, разрешено ли вам разыменовывать его.

6 голосов
/ 14 мая 2011

Вы имели в виду &buffer[SIZE]?Да, это законно в C ++.Значение ptr - это последний конец буфера, большинство стандартных алгоритмов может использовать его как итератор end () для буфера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...