char a[3]:編譯器會給數組分配3個單元,每個單元的數據類型爲字符
char *s:這是個指針變量,只佔四個字節,保存的是地址
char a[3] = “ab”;
//這種方法定義時,系統會自動從未初始化的元素開始,將之後的元素賦爲’\0’。
cout<<strlen(a)<<endl; //2
cout<<sizeof(a)<<endl;//3
a[0] = ‘m’;
cout<<a<<end; //mb
char a[3] = “a”;
cout<<strlen(a)<<endl; //1
cout<<sizeof(a)<<endl;//3
a[1] = ‘m’;
cout<<a<<end; //am
char b[5] = {‘a’,’b’,’c’,’d’,’\0’};
//這種方法或者 char c[] = {‘1’,’2’,’3’}定義時,系統不會自動在字符串的末尾添加字符串結束符即’\0’,用strlen函數將不能正確求出其長度,因爲strlen是通過\0來判斷字符串結束的;但sizeof()函數可以正確求出其所佔內存大小。因此需要人爲添加’\0’。這種方法char a[4]={‘a’,’b’,’c’}定義時,系統會自動從未初始化的元素開始,將之後的元素賦爲’\0’。
cout<<strlen(a)<<endl; //4
cout<<sizeof(a)<<endl;//5
cout<<b<<endl; //abcd
char a[]; // 錯誤定義
a[] = “abc”; //錯誤定義
char*e;
e = “xie”
cout<<strlen(e)<<endl;//3
cout<<sizeof(e)<<endl;//4
e[0] = ‘m’; //不能如此訪問
//char*e 的”xie”是常量所以被分配在常量存儲區,e爲字符指針類型是存放在棧區可以被更改,而常量存取區是隻讀區域,不可以被更改。char a[3] = “ab”的字符a和b是存放在棧區的所以可以進行寫操作。
string s;
s = “abc”;
s[0] = ‘m’;
cout<<s<<endl;//mbc
cout<<s.size()<<endl;//3
C中是沒有string類型的數據的,C中的字符串類型是用char[]和char*來定義的;
在C中的<string.h>頭文件裏聲明的函數原型都是針對char數組進行操作的,比如strcmp,strcpy,strcat等。
C++中string表示一種特殊的類,和vector、list等一樣是標準庫類型,支持長度可變的字符串,提供各種有用的操作,其中內存管理由系統處理。
String類型的字符串可以直接使用==來比較,但char數組的字符串需要使用strcmp來進行比較。
參考鏈接:
https://blog.csdn.net/qq330214001/article/details/88372063
https://www.cnblogs.com/X-Do-Better/p/8628492.html
https://www.linuxidc.com/Linux/2012-09/70818.htm
https://blog.csdn.net/kidults/article/details/80747578(相互轉換可參考該鏈接)