char *字符串和char []字符串的理解


一、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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM