指向字符串常量的指针

时间:2019-07-13 05:39:14

标签: c++ string pointers char

根据定义

char *str = "ankit"

这里str是指向char的指针。

当我们做类似的事情

cout<< str;

然后它正在打印ankit。为什么不存储ankit的地址,因为str是一个指针,所以它必须是一个地址

我尝试打印*str,结果为“ a”;我可以理解,但我不明白为什么为什么打印str时不给出指针而是字符串值。

char * str = "ankit";
cout<< str;

输出:ankit

1 个答案:

答案 0 :(得分:1)

对于char *T *,ostream具有不同的重载(对于模板类型T)。

来自<ostream>头文件:

template <class _Traits>
inline basic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>& _Ostr,
    const char* _Val) { // insert NTBS into char stream
template <class _Ostr, class _Ty,
    enable_if_t<conjunction_v< // prevent infinite recursion
                    negation<is_lvalue_reference<_Ostr>>, is_base_of<ios_base, _Ostr>, _Can_stream_out<_Ostr, _Ty>>,
        int> = 0>
inline _Ostr&& operator<<(_Ostr&& _Os, const _Ty& _Val) { // insert to rvalue stream

如果给出了已知的C字符串,则将使用接受char *参数的函数。

如果不可用,则将使用另一个接受任意指针值的函数。

还有一种接受void *指针的方法。