【问题标题】:Pointers and Arrays [ pointers to int vs pointers to char]指针和数组 [指向 int 的指针与指向 char 的指针]
【发布时间】:2017-09-03 12:37:25
【问题描述】:

为什么指针在指向整数数组和字符数组时表现不同?

例如

int num[] = {1,2,3};
cout << num ;

这会打印出第一个元素的 ADDRESS

char list[] = { '1', '2', '3'};
cout << list ;

这会打印出数组整个元素的 VALUE

同样

cout << (num+1) ;

打印出第二个元素的地址。而

cout << (list+1);

从第二个元素开始打印整个数组的VALUE

据我了解,数组名是指向数组第一个元素的指针。如果没有取消引用运算符 (*),指针应该返回元素的地址。但是为什么char指针会返回值呢?

【问题讨论】:

  • 不同的是operator&lt;&lt;是一个重载函数,char *的重载与其他指针类型不同
  • C 不是 C++ 不是 C。不要垃圾标签!
  • 我没有意识到这个问题是专门针对 C++ 的。我认为这与整个指针和数组概念有关。对不起

标签: c++ arrays pointers


【解决方案1】:

这不是指针行为不同:行为是 C++ 标准库如何处理指针输出。

具体来说,运算符&lt;&lt; 有一个non-member overload for const char *,它处理以null 结尾的C 字符串。这是应用于打印char 数组的重载。请注意,您的字符数组是 not 以 null 结尾的,因此打印它会产生未定义的行为。您可以通过向字符数组添加零来解决此问题:

char list[] = { '1', '2', '3', '\0'};

还有an overload that takes void *,适用于打印int指针。

【讨论】:

  • 你可以用0代替'\0
猜你喜欢
  • 2018-04-05
  • 2016-01-27
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多