char[] 和 int[] 的区别

Ale*_*lex 4 c++ arrays pointers operator-overloading implicit-conversion

最近,我看了一个视频,其中说当我定义一个整数数组时

int my_array[] = {1,2,3};
Run Code Online (Sandbox Code Playgroud)

然后我打印了 my_arraycout << my_array;然后我会得到内存中第一个整数的地址,但是当我们定义一个字符数组时

char my_string[] = "Hello";
Run Code Online (Sandbox Code Playgroud)

然后当我尝试打印 my_string 时,cout << my_string它返回Hello,当我们定义一个指向字符的指针时,它与指针类似

char mystring[] = "HELLO";
char *my = mystring;
cout << my << endl;//HELLO
Run Code Online (Sandbox Code Playgroud)

我们尝试打印返回字符串的指针变量。

现在我读了这篇文章,我读到这个字符串带着他的内存地址。但是我仍然无法弄清楚为什么它们不相同以及为什么字符数组打印字符串文字而 int 数组打印第一个的地址。

提前致谢。

Kam*_*Cuk 5

为什么字符数组返回字符串文字而 int 数组返回第一个的地址。

我认为“返回”这个词的意思是“打印”。

因为非成员std::ostream::operator<<(ostream&, const char *)重载遍历char*指针指向的内存并打印其内容,而没有std::ostream::operator<<(int*)重载,因此int*被强制转换为const void*并使用std::ostream::operator<<(const void*)重载打印值,该函数打印指针的值。

您仍然可以通过手动转换来打印指向字符串的指针的值:

cout << static_cast<void*>(my_string) << endl;
Run Code Online (Sandbox Code Playgroud)