char[] ,char*,string 三者的区别及转换

1. char[] p表示p是一个数组指针,相当于const pointer,不允许对该指针进行修改。但该指针所指向的数组内容,是分配在栈上面的,是可以修改的。

char *s1 = "hello";
char s2[] = "hello";
s2=s1;  //编译ERROR
s1=s2;  //OK

2. char * pp表示pp是一个可变指针,允许对其进行修改,即可以指向其他地方,如pp = p也是可以的。对于*pp = "abc";这样的情况,由于编译器优化,一般都会将abc存放在常量区域内,然后pp指针是局部变量,存放在栈中,因此,在函数返回中,允许返回该地址(实际上指向一个常量地址,字符串常量区);而char[] p是局部变量,当函数结束,存在栈中的数组内容均被销毁,因此返回p地址是不允许的。

char *s1 = "hello";
char s2[] = "hello";
s1[0]='a';  //ERROR
s2[0]='a';  //OK

3.  string是STL里的一个容器,内存管理是由系统处理,除非系统内存池用完。    char *的内存管理由用户自己处理,很容易出现内存不足的问题
 所以建议尽量使用string,不用char*,特别是在当我们要存一个串,但是不知道其他需要多少内存时。(尽量使用vector,不用数组,尽量使用迭代器,而不用指针)。但是使用string的时候一定要注意构造和拷贝以及析构带来的性能开销,尽可能的减少构造,能使用引用的地方尽量用引用,减少不必要的构造


4.string 转换成 char * ; char* 不用转string ,可以直接赋值

#include <iostream>
using namespace std;
int main()
{
    string s = "hello";
    const char *s1 = s.c_str();
    const char *s2 = s.data();
    cout<<s1<<' '<<s2<<endl;

    string ss;
    ss=s1;
    cout << ss << endl;
    return 0;
}

注意:只能转换成const char*,如果去掉const编译不能通过。


5.string转换成char[];char[] 不用转string ,可以直接赋值

#include <iostream>
using namespace std;
int main()
{
    string pp = "hello";
    char p[8];
    int i;
    for( i=0;i<pp.length();i++)
        p[i] = pp[i];
    p[i] = '\0';
    cout<<p;
    return 0;
}
其实string 要转成C风格的字符转,转成char* 就够用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值