путаница при печати символов

У меня есть код:

#include <iostream>
#include <string>
using namespace std;
int main(){
char abc [20] = "Hello Hello Hi";
char* ptr = abc;
cout << (abc+3);
return 0;

}

Почему он печатается с третьего знака, а не просто с третьего?

-редактировать — тому, кто пометил его. это не то же самое, что prinf (), но концепция того же типа. я просто не знал нюансов

-1

Решение

Чтобы понять почему, вам нужно немного понять арифметику указателей.

abc такой же как &abc [0] и (abc + 3) совпадают с &аЬс [3]

При этом cout печатает строку из заданного символа * в нулевой символ.

Следовательно, вы просто печатаете строку, которая начинается с третьего символа до конца строки. Если вы хотите напечатать только третий символ, вы можете разыменовать указатель на третий символ, как этот.

 *(abc + 3)
6

Другие решения

char abc [20] распадается на char*, который фактически является строкой в ​​стиле c. abc+3 остается указателем, просто смещенным от abc[0], так std::cout будет по-прежнему печатать его как строку.

4

Потому что потоки имеют перегрузку для char* который обрабатывает ввод как C-String. Операторы потока будут печатать все до нулевого терминатора (когда char*).

Если вы хотите напечатать один символ, вы должны преобразовать выражение в char не char*,

cout << (abc+3);     // Type of expression is char*

cout << (*(abc+3));  // Type of expression is char
// This prints a signle character.
2
По вопросам рекламы [email protected]