char 与string

char* const cp 和 const char* p 的区别
0.char* const cp 和 const char* p 的区别

char * const cp : 定义一个指向字符的指针常数,即const指针

其实const 放在cp前证明cp是一个const,cp是不允许改变的

const char* p : 定义一个指向字符常数的指针

同理,const 是c描述char的,char是const,所以指针可变

char const* p : 等同于const char* p

const char **p是一个指向指针的指针,那个指针又指向一个字符串常量。
char ** p也是一个指向指针的指针,那个指针又指向一个字符串变量。

  1. const char* 和string 转换

(1) const char*转换为 string,直接赋值即可。

 EX: const char* tmp = "tsinghua".

        string s = tmp;

(2) string转换为const char*,利用c_str()

EX:  string s = "tsinghua";

       const char*tmp = s.c_str();
  1. char和const char之间的转换

(1) const char转化为char,利用const_cast<char*>

 EX: const char* tmp = "tsinghua";

         char* p = const_cast<char*>(tmp);

(2) char转化为const char,直接赋值即可。

 char* p = "tsinghua".

 const char* tmp = p;
  1. char*和string之间的转换

有了1和2的基础,char*和string转化就很简单了。

(1)char*转化为string,直接赋值即可。

 EX: char* p = "tsinghua".

        string str = p;

(2)string转化为char*,走两步,先是string->const char*,然后是const char*->char*

 EX:  string str = "tsinghua";

         char* p = const_cast<char*>(str.c_str()):

复制代码
String类是不可变(final)的,对String类的任何改变,都是返回一个新的String类对象.这样的话把String类的引用传递给一个方法,该方法对String的任何改变,对原引用指向的对象没有任何影响,这一点和基本数据类型相似.
1
2
3
4
Strings1,s2;
s1=“abc”;
s2=s1;
s2=“def”;
//这样操作之后s1是"abc",s2是"def".
1
2
3
4
5
6
stringa=“hello,world!”;
stringb=“hello,world!”;
stringc=“hello!”;
stringa=“hello,world!”;
stringb=“hello,world!”;
stringc=“hello!”;
a 和 b 是不是指向同一个地址呢,这个问题在各论坛都是谈论很激烈,其实很简单,跟下这些字符串的内存地址就好了
1
stringa=“hello,world!”;
1
2
00000042moveax,dwordptrds:[02A62208h]
00000048movdwordptr[ebp-44h],eax
1
stringb=“hello,world!”;
1
2
0000004bmoveax,dwordptrds:[02A62208h]
00000051movdwordptr[ebp-48h],eax
1
stringc=“hello!”;
1
2
00000054moveax,dwordptrds:[02A756F8h]
0000005amovdwordptr[ebp-4Ch],eax
a的地址指向02A62208h,b的地址也是02A62208h,这说明了什么,创建b的时候.net机制肯定是先去查找内存中是否有这个字符串的内存地址,如果有则指向,没有才创建[1]
复制代码

在C语言中,`char`和`string`是两个不同的数据类型。 1. `char`(字符类型):`char`是C语言中表示单个字符的数据类型。它用来存储ASCII码表中的字符,包括字母、数字、标点符号和特殊字符等。在内存中,`char`类型占据一个字节(8位),可以表示256种不同的字符。例如,`char ch = 'A';`用于声明一个字符变量`ch`并将其初始化为字母'A'。 2. `string`(字符串类型):在C语言中,并没有内置的字符串数据类型。相反,字符串通常用字符数组来表示。一个字符串是一个以空字符(`\0`)结尾的字符数组。可以通过声明一个字符数组来表示字符串,并使用字符串相关的库函数进行操作,如字符串的拷贝、连接、比较等。例如,`char str[] = "Hello, World!";`声明了一个字符数组`str`并将其初始化为字符串"Hello, World!"。 区别: - `char`是一个简单的数据类型,用于存储单个字符;而`string`是一个由字符组成的字符数组,用于表示字符串。 - `char`占据一个字节的内存空间;而`string`的长度取决于字符数组的大小。 - `char`可以直接赋值为一个字符;而`string`需要使用字符数组来表示,需要通过字符串相关的库函数来操作。 - `char`可以进行字符级别的操作,如比较、转换等;而`string`可以进行字符串级别的操作,如拷贝、连接、查找等。 需要注意的是,上述的区别是基于C语言的原生特性。在一些高级语言(如C++、Java、Python)中,通常有更高级的字符串类型,提供了更多的字符串操作和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值