有1点疑问想问问大家
有一点疑问想问问大家
有个疑问一直困扰我很久了,就是那句cout<<result_str<<endl;我知道输出字符串的时候是这样的,但是我就是不知道为什么是这样的,明明result_str是一个指针,可是为什么直接输出这样字符串指针就把该指针指向的字符串输出出来了呢,甚至都不用循环的。而输出*result_str得到的确实第一个大些字母。
我就是不理解为什么输出单个指针就把字符串输出出来了,这个指针不是应该指向字符串的首地址吗,这是什么原理呢,希望有人能够详细的解释一下,在这里我先谢谢了。
------解决方案--------------------
因为<<运算符被重载了
这是iostream类的一个名为operator<<的针对各种数据类型分别进行处理的成员函数,而它针对char*类型的输入的处理就是从这个指针开始循环打印字符,直到遇到'\0'为止
------解决方案--------------------
在cout的内部会有判断,传进来的参数是什么类型。如果是char指针类型就输出全部字符串。如果是其他指针类型就输出地址
- C/C++ code
#include<iostream> #include<iostream> #include<cstdlib> #include<cstring> using namespace std; int main( void ) { const char *cp1 = "Mary and Linda "; const char *cp2 = "are friends."; size_t len = strlen(cp1) + strlen(cp1); char *result_str = new char[len+1]; strcpy(result_str,cp1); strcat(result_str,cp2); cout<<result_str<<endl; delete [] result_str; system("pause"); return 0; }
有个疑问一直困扰我很久了,就是那句cout<<result_str<<endl;我知道输出字符串的时候是这样的,但是我就是不知道为什么是这样的,明明result_str是一个指针,可是为什么直接输出这样字符串指针就把该指针指向的字符串输出出来了呢,甚至都不用循环的。而输出*result_str得到的确实第一个大些字母。
我就是不理解为什么输出单个指针就把字符串输出出来了,这个指针不是应该指向字符串的首地址吗,这是什么原理呢,希望有人能够详细的解释一下,在这里我先谢谢了。
------解决方案--------------------
因为<<运算符被重载了
这是iostream类的一个名为operator<<的针对各种数据类型分别进行处理的成员函数,而它针对char*类型的输入的处理就是从这个指针开始循环打印字符,直到遇到'\0'为止
------解决方案--------------------
在cout的内部会有判断,传进来的参数是什么类型。如果是char指针类型就输出全部字符串。如果是其他指针类型就输出地址