#include <iostream>
int main()
{
std::cout << "25"+1;
return 0;
}
Я получаю "5" в качестве вывода. когда я использую "5" + 1, вывод пуст, "456" +1 выход - "56". путают то, что происходит за кулисами.
#include <iostream>
int main()
{
std::cout << "25"+1;
return 0;
}
Я получаю "5" в качестве вывода. когда я использую "5" + 1, вывод пуст, "456" +1 выход - "56". путают то, что происходит за кулисами.
Строковый литерал "25"
действительно представляет собой массив char типа const char[3]
со значениями {'2', '5', '\0'}
(два символа, которые вы видите, и нуль-терминатор.) В C и С++ массивы могут легко распадаться на указатели к их первому элементу. Вот что происходит в этом выражении:
"25" + 1
где "25"
распадается на &"25"[0]
или указатель на первый символ. Добавление 1
к этому дает указатель на 5
.
Кроме того, std::ostream
, из которых std::cout
является экземпляром, печатает a const char*
(обратите внимание, что char*
также будет работать), предположив, что это строка с завершающим нулем. Поэтому в этом случае он печатает только 5
.
За кулисами "25"
представляет собой массив из трех символов: два, представляющие '2'
и '5'
, и терминатор со значением нуля, чтобы отметить конец.
Массив - это немного странное существо с тенденцией к изменению в указатель (к первому элементу), если вы что-то делаете с ним. То, что происходит здесь: добавление одного в массив не имеет смысла, поэтому оно превращается в указатель. Добавление одного к нему дает указатель на второй символ.
При указании символа символ <<
предполагает, что он указывает на завершенную строку и сохраняет символы печати до тех пор, пока не найдет терминатор (или каким-то образом не взорвется, если его нет). Поэтому, указав указатель на второй символ строки, вы будете печатать все символы со второго и второго, как вы заметили.
Если вы новичок в C и С++, сначала вы должны решить, на каком языке учиться, так как они очень разные. Если вы выберете С++, вам будет полезно познакомиться с его дружелюбной высокоуровневой библиотекой (например, std::string
для работы со строками без этой странности), прежде чем погрузиться в безумство уровней и указателей низкого уровня.
Когда вы пишете ", компилятор понимает, что вы вставляете строку внутри. В этом случае вы используете функцию cout, поэтому она выводит на экран эту строку. Вы работаете со строками при использовании оператора" +", поэтому выполняете операцию смещения перед отправкой в cout.