C++的一个问题,比方char[]="very good";string b=char;为什么这样的语句是正确的?把一个地址赋给一变量

如题所述

这代码怎么会能运行?难道是说这样的?


char a[]="very good";

string b=a;

cout<<b<<endl;


字符数组中数组名字其实就是常量指针

string 这种数据类型的变量名字其实也是指针,只不过是指针变量而已。


你可以运行下面的代码就知道了


#include <iostream>
#include <string>
using namespace std;
int main()
{
char a[]="very good";
string b=a;
cout<<b[1]<<endl;
char c[]="not bad";
b=c;
cout<<b<<endl;
}


b[1] 可以输出 e ,说明 b 其实指向的就是 v ,[] 可以看做是下标运算符,整个过程其实就是取 b 指向的字符的下一个字符。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-05
首先char是关键字,您的意思应该是
char ch[]="very good"; string b = ch;
这是因为string有构造函数:
string(const char* c);能够将一个char*类型的地址转换为一个string变量
而string b = ch;则会调用该函数(注意不是复制构造函数)。即
string b = ch;等价于string b(ch);
第2个回答  2017-11-07
不相信C++下char[]="very good";string b=char;这两句代码的正确性——char是C/C++的保留字,不可以用来做用户数组名,这样写编译恐怕都过不了。如果不用char而用别的什么如str,那么string b=str;就是声明一个string类对象b,并用str指向的字符串初始化。这有什么不妥之处吗?
第3个回答  2013-05-05
重载赋值运算符
相似回答