char* char[] string

一、char* char[] string

1.1 char*

一个字符指针变量,只占四个字节,32位,用来保存一个地址
char* cp = “123” ;
当编译器遇到这句时,会把str数组中从第一个元素把123\0 逐个填入
内存
这里有一个问题值得思考,char* cp = “123” ;cp是一个指针变量,“123"是一个常量字符串,指针不应该对应的地址吗,岂不是类型不一致了。c语言中字符串常量的本质其实是一个地址,编译器会给字符串常量分配地址,如“123” 存储在内存中是 0x3000 0x3001 0x3002 所以cp = “123” = 0x3000 是不是就合理了。

1.2 char[]

当定义 char a[10] 时,编译器会给数组分配十个单元,每个单元的数据类型为字符。
数组名,他是一个常量类型,所以不能修改
用一句话来概括,就是 char *s 只是一个保存字符串首地址的指针变量,
char a[] 是许多连续的内存单元,单元中的元素为char

1.3 string

用字符数组存放字符串容易发生数组越界的错误,而且往往难以察觉。因此,C++ 标准模板库设计了 string 数据类型,专门用于字符串处理。
string 类型的变量就是用来存放字符串的,也叫“string对象”。string 并不是 C++ 的基本数据类型,它是 C++ 标准模板库中的一个“类”。
要使用 string 对象,必须包含头文件 。

二、 转换

2.1 char* <==> char[]

//char* ==> char[]
   char* cp = "123";
   char arrc[10] = "4321";
   strcpy(arrc,cp); //#include<string.h> 或者 <cstring>
   // strncpy(arrc,cp,strlen(cp)+1); //这两个函数方法都可以,这里为什么一定要加1,后面解释

//打印 arrc:123
//char[] ==> char* 直接赋值
   char* cp = "123";
   char arrc[10] = "4321";
   cp = arrc;
   
//打印 cp:4321

2.2 char* <==> string

//char* ==> string 直接赋值
   char* cp = "123";
   string str;
   str = cp;
// char* ⇒ string 构造拷贝
	char* cp = "123";
	string str(cp,cp+strlen(cp));

//打印:str:123 
//string ==>char* 
string str = "123";
char* cp;
cp = const_cast<char*>(str.c_str());

//打印:cp:123

char[] <==> string

//char[] ==> string 直接赋值
char arrc[] = {"123"};
string str = arrc;

//char[] ==> string 构造函数拷贝
char arrc[] = {"123"};
string str(arrc,arrc+strlen(arrc));

//打印:str:123
//string ==> char[]
string str = "123";
char a[] = "4321";
strcpy(a,const_cast<char*>(str.c_str()));//#include<string.h> 或者 <cstring>
//strncpy(a,const_cast<char*>(str.c_str()),str.length()+1);

//打印:a:123;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值