C++中字符数组与整数数组的指针

Pon*_*ont 2 c c++ arrays pointers

我试图理解C++中的指针和数组.我注意到,在下面的代码输出a正确地给出了第一个元素的地址array,但输出cpk,而不是一个地址.

int array[3]={4,7,2};
int * a;

a= array;

char Carray[3]={'p','k','\0'};
char * c;

c= Carray;

cout << a << "\n";
cout << c << "\n";
Run Code Online (Sandbox Code Playgroud)

这是找到第一个元素的地址的错误方法Carray吗?或者这是如何cout解释整数和字符数组的指针的一些怪癖.

输出:

Ox23fe30
pk
Run Code Online (Sandbox Code Playgroud)

Moo*_*uck 6

如何cout解释字符数组的指针是一个怪癖.

当给定指针时,cout将打印地址,除非它是a char*,在这种情况下,它将指针解释为c样式字符串(指向结束的字符数组的指针将为空字节).

要打印char数组的地址,请将其强制转换为void*第一个:cout << reinterpret_cast<void*>(c) << "\n";


pze*_*zed 5

c,你在打电话operator<<(std::istream&, char*).这只是打印字符直到它命中'\0',就像一个普通的旧C风格的字符串.

a,operator<<(std::istream&, int*)打印地址.