首页 > 解决方案 > char[] 和 int[] 的区别

问题描述

所以最近,我看了一个视频,它说当我定义一个整数数组时

int my_array[] = {1,2,3};

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

char my_string[] = "Hello";

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

char mystring[] = "HELLO";
char *my = mystring;
cout << my << endl;//HELLO

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

现在我已经阅读了这篇文章,并且我读到该字符串与他一起获取内存地址。但我仍然不明白为什么它们不一样,为什么一个字符数组打印字符串文字,而 int 数组打印第一个的地址。

提前致谢。

标签: c++arrayspointersoperator-overloadingimplicit-conversion

解决方案


为什么 chars 数组返回字符串文字,而 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;

推荐阅读