太久沒寫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 }
參考資料:
- http://www.imooc.com/article/30475
- https://www.cnblogs.com/ZY-Dream/p/10038503.html
- https://blog.csdn.net/u014038273/article/details/77649525