Как это распечатать весь массив? - PullRequest
0 голосов
/ 17 апреля 2019

Так что я возился с векторами и windows-api, и кто-то предложил использовать указатель на первый элемент вектора в качестве буфера для функции.

Я вышел и попытался распечататьмассив с синтаксисом, и он напечатал весь массив, и теперь мне интересно, почему это так?

char test[10] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' };
std::cout << &test[0] << std::endl;
//output: abcdefghij

Редактировать 1: я обнаружил, что печать с именем массива тоже работает, но этот код удивил меня, потому что с помощьюссылочный синтаксис печатает массив символов в порядке убывания.Но без использования синтаксиса рефренсирования это не удивляет, почему это так?

for (int i = 0; i < 10; i++) {
    std::cout << &test[0] + i << " ";
}
//outputs: abcdefghij bcdefghij cdefghij defghij efghij fghij ghij hij ij j

1 Ответ

5 голосов
/ 17 апреля 2019

&test[0] - указатель на символ, на первый символ в массиве.

Отправка char * в cout эквивалентна печати строки. Базовая логика начнет сбрасывать символы на экран до тех пор, пока не найдет символ NULL, то есть char со значением ноль.

Как уже упоминали другие, вам просто повезло, что у вас, очевидно, был ноль (неинициализированная память?) Сразу после конца вашего массива. В противном случае струнный принтер продолжал бы работать, пока не нашел бы его.

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