读书人

初学C++有个有关问题请问上

发布时间: 2012-09-13 09:51:52 作者: rapoo

初学C++有个问题请教下

C/C++ code
#include <iostream> #include <string>using namespace std;void print(char* c){      //这里为什么能使用char类型的指针,而不使用string* 呢 ?    //cout << "形参地址" << *c << endl;  这里的c是指针吗? 我*c来取得c的值(李四)不对吗,为什么下面的反而是正确的    cout << "形参地址" << c << endl;}int main(int argc, char *argv[]) {     string s = "张三";    cout<< "实参地址" << &s << endl;    //print(s);     为什么print("李四")可以,而print(s)不行?    print("李四");                system("pause");    return 0;} 



刚学习,注释的三个问题,有些基础还不是很懂,请一一解释下哈

[解决办法]
s.c_str()
[解决办法]
探讨

1、char *是c类型字符串,string是c++类型字符串,不用string *是因为string是一个类,生成的是字符串是对象而不是char *数组。
2、c是指针,如果想要取得c的值需要进行解引用,也就是&c。之所以用c能正确输出是因为char *重载了<<。
3、因为s是string类型的对象,不能隐式转换为char *。可以用s.c_str()将string对象转化为c+……

[解决办法]
第一个问题:
void print(string* c){

cout<< "形参地址" << c << endl;
cout<<"形参内容"<<*c<<endl;

}
这样写是完全没有问题的,但是你在使用这个函数的时候要知道,string是c++标准类库中的一种类型,它本身是个类,你传进去的参数也必须是指向这个对象的指针。
第二个问题:
你既然在写函数的时候,形参就已经声明成指针了,那么c必然是个指针,直接打印出来就是指针内容也就是一串十六进制数字,*c就代表了这个指针指向的内容,此程序中的也就是李四。
第三个问题:
你的函数只能接受char型的指针,你在调用print("李四"); 时传入的参数是指向这个字符串“李四”的首地址,也就是正确的,但是你想传入s是不行的,原因是s是一个string对象,与你函数接受的参数是不匹配的。
你需要仔细理解 char和string本质上是不容的,char是基本类型,而sring是一个类。
[解决办法]
C/C++ code
#include <iostream> #include <string>using namespace std;void print(char* c){      //这里为什么能使用char类型的指针,而不使用string* 呢 ?    cout << "形参地址" << &c << endl;  //这里的c是指针吗? 我*c来取得c的值(李四)不对吗,为什么下面的反而是正确的    cout << "形参的值" << c << endl;}int main(int argc, char *argv[]) {     string s = "张三";    cout<< "实参地址" << &s << endl;    print("张三");                system("pause");    return 0;} 

读书人网 >C++

热点推荐