ptr=numbers应该是ptr指向numbers[0]的地址,cout<<ptr,应该会输出number[0]的地址吧,但是如图,为何把整个number字符数组的内容"www.tutorial.com"给输出了。而且当改为cout<<*ptr后,输出内容就会变为只有一个‘w’,这究竟是为啥,求大佬解答。
而且如果是int数组,就不会有这种情况
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。因为两个函数内部实现不同。