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

過久沒寫c/c++代碼了,寫了劍指offer的一道題,就把本身整懵了,真的很差意思說本身學過算法,打過一點比賽html

主要仍是對指針的概念模糊c++

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

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

char *p 定義一個指針變量p,其指向char類型的地址(變量保存的地址所在內存單元中的數據類型爲char),不管指向的是哪一種類型,指針自己的類型都是整型,由於保存的是地址spa

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 }

輸出:.net

 

 從輸出能夠看出,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所指向的地址code

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指向同一個地址htm

即p2自己是變量,但指向的區域是常量blog

 

本質區別

當定義 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. http://www.javashuo.com/article/p-hpamsqxx-ms.html
  3. https://blog.csdn.net/u014038273/article/details/77649525
相關文章
相關標籤/搜索