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();
2. 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;
3. 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]优质内容筛选与推荐>>