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
三者之间关系如图所示:
count<<*ptr; 等效于*(ptr+0) == *(numbers+0); 即numbers数组的第一个元素,所有是打印出"w
因此cout<<ptr;的时候,是打印ptr指针所指向的地址的变量数据,而numbers数组中的值在内存空间排列上是有序的,直到'\0'结束。因此打印出来的值是整个字符串。