提高对char数组中的指针语法的理解

时间:2019-03-23 20:36:31

标签: c++ pointers

我有这个(有效的)代码:

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

cout<<*(ptr+n)的输出来自输入。

为什么cin>>ptr起作用,不是cin>>*ptr吗?

1 个答案:

答案 0 :(得分:1)

cin >> ptr;

是此函数调用的语法糖:

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

这应该更清楚地表明将有一个与名称operator >>关联的过载集。确实,看着reference,我们看到例如这个:

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以外的其他输入都将被丢弃。