初学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()
[解决办法]
[解决办法]
第一个问题:
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;}