一、char* 字符串
1.如何聲明一個char*字符串
你可以這樣:
char* str = "test"; //str是一個指針,存放在棧區,"test"是一個常量,存放在常量區,VS2017要求這句聲明前面必須加上const,因為它所指向的常量字符串是不可更改的
delete str;
還可以這樣:
char* str = new char[20]; //str是一個指針,存放在棧區,指向堆區的一塊20個字節的區域的首地址
strcpy(str, "qwewqe"); //對其進行賦值
delete str;
還可以這樣:
char* str =new char[20] { 'a' }; //直接將字符串內所有的元素都設為字符 'a'
delete str;
或者這樣:
int main() { int a; a = 10; char * arr = new char[a]; cin.getline(arr, a);//最多讀a個字符,如果提前遇到換行符,會立即停止 cout << arr << endl; return 0; }
2.如何聲明一個char []字符串
你可以這樣:
char cat[4] = {'T', 'O', 'M', '\0'}; //如果最后一個字符不是 '\0' ,那么cat就只是一個字符數組,而不是字符串了
delete [] cat;
還可以這樣:
char cat[4] = "cat"; //注意字符數是3,而cat的大小是4
或者這樣:
char cat[] = "cat"; //讓編譯器自動判斷大小
int main() { char cat[] = "cat"; cout << sizeof(cat) / sizeof(cat[0]) << endl;//4,這里沒有length()或者size()方法計算元素個數 return 0; }
[]內如果要限定大小,只能用const size_type,包括字面值。
3.兩者之間的區別
3.1變量加減運算
int main() { char* str = "test"; char cat[4] = "cat"; str++; cout << str << endl;//est cout << str[0] << endl;//e return 0; }
str++是合法的,而cat不能這樣操作,因為它是數組名。
3.2寫權限
上述代碼中,str[1]不能放在賦值號的左邊,而cat[1]可以。
3.3用char[]初始化char *
int main() { char cat[] = "cat"; char* str = cat; cout << str << endl;//cat return 0; }