過久沒寫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 }
參考資料: