指向char的指针vs指向数组的指针

Bob*_*bby 4 c++ pointers char

在我决定回顾一些所谓的微不足道的例子之前,我以为我对指针有了不错的认识.

我知道的一件事是,在声明一个数组时说:

int arr[2] {3, 5};
Run Code Online (Sandbox Code Playgroud)

arr将保存数组中第一个元素的值,因此尝试打印that(cout << arr)显然给出了地址arr[0].即使我认为我的程序使用指针它仍然相似.

我的问题是为什么我可以打印hbonjour输出,但我不能这样做p

当我h++再次增加并打印它时,我也会看到它onjour.指针有何不同char

#include <iostream>
#include <string>

int main()
{
    char* h = "bonjour";
    int k[4]{3, 4, 5, 6};
    int * p = k;

    std::cout << "Hello, "<< h << "!\n";
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*rry 9

流式传输时h,您正在使用此重载:

template< class Traits >
basic_ostream<char,Traits>& operator<<( basic_ostream<char,Traits>& os,  
                                        const char* s );
Run Code Online (Sandbox Code Playgroud)

但是当你流式传输时p,你正在使用这个:

basic_ostream& operator<<( const void* value );
Run Code Online (Sandbox Code Playgroud)

前者将打印每个字节,直到它到达a \0,后者将只打印地址.那就是 - 只是一个特殊情况const char*,你正在利用.