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] 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM