C++ string char[] char* 用法说明

char * 和 char [ ] 的区别

char a[5] :编译器会给数组a分配5个单元,每个单元的数据类型为字符
char *s : 这是个指针变量,只占四个字节,用来保存一个地址
sizeof(a) = 5
sizeof(s) = 4

用一句话来概括,就是 char s **只是一个保存字符串首地址的指针变量
char a[] 是许多连续的内存单元,单元中的元素为char
之所以用 char *能达到 char a[] 的效果,还是字符串的本质,即给你一个字符串地址,便可以随心所欲的操所他。但是,
char* 和 char a[ ] 的本质属性是不一样的

char *a = “abc”;
char b[3] = { ‘a’,’b’ };
b[0] = ‘b’;
a[0] = ‘b’;
以上代码在运行时肯定会报错

char*a = ”abc“ 的 ”abc“ 是常量所以被分配在常量存储区,
a为字符指针类型是存放在栈区可以被更改,而常量存储区是不能更改的,是只读区域,所以当你试图去写入数据的时候,会报错。
而char b[3] = {‘a’,‘b’}的字符a和b是存放在栈区的所以可以进行写操作。

string

怎么理解string呢
我们可以把string 看作是 以字符为元素的容器 , 所有的元素构成字符串。

那么既然有了char * 和 char[] 为什么还要用string 呢 其中主要原因是:

1.当我们要存一个串,但是不知道其他需要多少内存时, 用string来处理就最好不过了。
2.string的内存管理是由系统处理,除非系统内存池用完,一般情况下,不用人为的去管理内存,
防止内存溢出等发生

string需要注意的地方:

string可以根据下标访问
不能将string直接赋值给char*

相互转化

#include <iostream>
#include <stdlib.h>

string str = "12345";
str.length() //5

string 转 const char* 两种方法, 切记是const char*

    const char *s1 = str.data(); 
    const char *s2 = str.c_str();

string 转 char*

    int iLength = str.length();
    char *s3 = (char*)malloc((iLength+1)*sizeof(char));
    str.copy(s3,iLength,0);
    free(s3);

string 转char []

    char s4[iLength+1];
    for(int i=0; i<iLength; i++)
    {
        s4[i] = str[i];
    }

char *转string

        char* q = "67890";
        string qq = q;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值