c/c++ char * char[] string 的區別及轉換


太久沒寫c/c++代碼了,寫了劍指offer的一道題,就把自己整懵了,真的不好意思說自己學過算法,打過一點比賽

主要還是對指針的概念模糊

寫一下關於 char * char[] string 的區別及轉換

字符數組 char p1[] 編譯器會在末尾自動加上'\0' p1 = &p1[0] cout << p1 直接輸出這個字符串,本質就是通過這個地址

char *p 定義一個指針變量p,其指向char類型的地址(變量保存的地址所在內存單元中的數據類型為char),無論指向的是哪種類型,指針本身的類型都是整型,因為保存的是地址

1 int main() {
2     char p1[] = "hello c++";
3     char *p2 = "hello c++";
4     cout << p1 << endl << p2 << endl;
5     cout << *p1 << endl << p2[0] << endl;
6     return 0;
7 }

輸出:

 

 從輸出可以看出,char *p2 和 char p1[]沒有區別,但是char *p2 指向的區域是常量無法修改

 

1 int main() {
2     char p1[] = "hello c++";
3     char *p2 = "hello c++";
4     p2[0] = 'a';
5     cout << p2;
6     return 0;
7 }

 

修改p2的指,程序運行就會出錯,但可以修改p2所指向的地址

1 int main() {
2     char p1[] = "hello c";
3     char *p2 = "hello c++";
4     p2 = p1;
5     cout << p2 << endl;
6     p1[0] = 'a';
7     cout << p2 << endl;
8     return 0;
9 }

 

可以看到p2的值被修改,與p1指向同一個地址

即p2本身是變量,但指向的區域是常量

 

本質區別

當定義 char p[10] 時,編譯器會給數組分配十個單元,每個單元的數據類型為字符

定義 char *s 時, 這是個指針變量,只占四個字節,用來保存一個地址

 

string是C++中定義的在C中沒有,推薦使用string

string轉char * 

1 char t[10];
2     string str = "abc";
3     strcpy(t,str.c_str());

char * 轉string

1 int main() {
2     char t[10] = "abc";
3     string str = t;
4     cout << t;
5     return 0;
6 }

 

參考資料:

  1. http://www.imooc.com/article/30475
  2. https://www.cnblogs.com/ZY-Dream/p/10038503.html
  3. https://blog.csdn.net/u014038273/article/details/77649525

 


免責聲明!

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



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