【问题标题】:Why char array and int array get printed as different things? [duplicate]为什么 char 数组和 int 数组被打印为不同的东西? [复制]
【发布时间】:2015-08-16 15:26:14
【问题描述】:
int main ()
{
    int intarr [5] = {1,6,7,9,3);
    char charr [7] = "Avneet";
    std::cout << intarr << "\n";
    std::cout << charr << "\n";
    return 0;
}

该程序打印的第一行是内存地址,第二行是整个字符串 (Avneet)。有什么不同?还有一个问题。在 int 的情况下,我得到的地址是什么?整个数组的地址,或者只是该数组第一个元素的地址。

【问题讨论】:

    标签: c++ arrays pointers c++11


    【解决方案1】:

    std::basic_ostream&lt;&gt; 具有 operator&lt;&lt; 的重载,用于 char const* 和需要 C 样式以零结尾的字符串的有符号/无符号版本。

    还有void const*重载,用于任何其他指针类型并输出地址。

    【讨论】:

      【解决方案2】:

      std::cout 运算符 &lt;&lt;const char* 重载,这样它指向的字符串就会被打印出来。 int* 参数不是这种情况。

      当数组(按值)作为参数传递给函数时,参数衰减为指向数组中第一个元素的指针,这就是为什么您会得到您所看到的行为 - char 数组参数衰减到 char*cout 运算符 &lt;&lt; 重载打印字符串。

      int* 的情况下,没有重载,因此您只会看到打印的int 数组的第一个元素的地址。

      【讨论】:

        【解决方案3】:

        我想说的是,当创建一个 char[7] 时,它就像一个 7 个字符的字符串。打印时不会显示其地址,而是显示值。

        另一方面,int 数组是一个包含一些原语的对象。打印时,您只会看到该对象的地址。您需要一个 for 循环来打印每个数组元素。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-04
          • 2017-05-11
          • 2020-11-09
          • 1970-01-01
          • 1970-01-01
          • 2012-12-30
          相关资源
          最近更新 更多