улучшить понимание синтаксиса указателя в массиве символов - PullRequest
2 голосов
/ 23 марта 2019

У меня есть этот (рабочий) код:

char * ptr = new char[10];
cin >> ptr;

вывод: cout<<*(ptr+n) с входа.

почему cin>>ptr работает, не так лиcin>>*ptr

1 Ответ

1 голос
/ 23 марта 2019
cin >> ptr;

является синтаксическим сахаром для вызова этой функции:

operator >>(std::cin, ptr);

Это должно прояснить, что с именем operator >> будет связан набор перегрузки. И действительно, глядя на ссылку , мы видим, например, вот этот:

template< class CharT, class Traits>
basic_istream<CharT,Traits>& operator>>( basic_istream<CharT,Traits>& st, CharT* s );

это функция, которую вы вызываете. Он принимает экземпляр std::basic_istream (который std::cin) и указатель на базовый тип символа (ptr в вашем случае) и делает правильные вещи.

Когда вы вместо этого вызываете

operator >>(std::cin, *ptr);

вы разыменовываете указатель на массив char, который возвращает ссылку на первый элемент этого массива. Существует перегрузка, которая принимает ссылку на один char (# 1 в списке перегрузок), но ничего не делает, кроме чтения одного char и все. Ввод, отличный от первого char, будет отброшен.

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