字符数组输出的问题。。。。

图片说明

ptr=numbers应该是ptr指向numbers[0]的地址,cout<<ptr,应该会输出number[0]的地址吧,但是如图,为何把整个number字符数组的内容"www.tutorial.com"给输出了。而且当改为cout<<*ptr后,输出内容就会变为只有一个‘w’,这究竟是为啥,求大佬解答。

图片说明

而且如果是int数组,就不会有这种情况

这是因为std::cout的<<运算符有多个重载的形式:
对于char,它的实现是,输出单个的字符
对于char*,它的实现是,当作字符串,一直往下输出,直到遇到\0

所以 cout << ptr是第二个情况,cout << *ptr是第一个情况。

好比你写了两个函数
void prn(char ch) { printf("%c", ch); }
void prn(char* ch) { while (*ch) { printf("%c", *ch); ch++; } }
那么为什么
char ch[10] = "hello";
prn(*ch);
prn(ch);
一个输出h一个输出hello。因为两个函数内部实现不同。

c++中cout对字符指针的处理方式, 参考这篇:
https://blog.csdn.net/hairetz/article/details/4129788

  1. 楼主应理解“数组名、数组地址、数组首字节地址三者之间的关系”,对数组名&a实际得到的是数组的首地址,其值在数值上与a、&a[0]相同,但含义不同,&a+1实际已经增加了整个数组的长度。
  2. 三者之间关系如图所示:
    图片说明

  3. count<<*ptr; 等效于*(ptr+0) == *(numbers+0); 即numbers数组的第一个元素,所有是打印出"w

  4. 因此cout<<ptr;的时候,是打印ptr指针所指向的地址的变量数据,而numbers数组中的值在内存空间排列上是有序的,直到'\0'结束。因此打印出来的值是整个字符串。

若有帮助,还望楼主采纳!!!谢谢!