天天看點

字元串指針變量和字元串數組的記錄

1.字元串指針變量

首先明确:存放變量位址的變量為指針變量。

1.1 字元串指針變量的定義形式

char *p= "i like";
           

這裡p就是一個字元串指針變量。p存放的是字元串“i like”的首位址。

1.2 通過字元串指針變量通路字元串的方式

char *p = "i like";
//列印i
cout<<p[0]<<endl;
//列印整個字元串"i like"
cout<<p<<endl;
           

我們可以通過指針變量帶下标的方式通路字元串的具體元素。列印時直接寫指針變量,那麼c++編譯器會從字元串的首位址開始列印,直到遇見“\0"停止。(注:每個字元串,c++編譯器都會在其末尾加上“\0”)

1.3 字元串指針變量的注意事項

不能用指針變量帶下标方式改變具體元素

char *p = "i like"
p[0] = "t"
//這個是錯誤的。因為p[0]是字元串常量,不可更改。
           

如果将一個字元串的值複制給一個開辟好空間的指針變量,利用strcpy函數

char *p = "i like"
char *t
t = new char[strlen(p)+1]
strcpy(t,p)
           

2 字元串數組

2.1 字元數組的定義方式

char k[] = "i love"
           

這裡k[是一個字元數組。數組名是字元串的首位址。

2.2 字元數組的通路方式

char k[] = "i love";
//列印具體元素 i
cout << k[0]<<endl;
//列印整個字元串
cout<<k<<endl;
           

可以看到字元數組的通路方式和字元串指針變量相同。

2.3 字元數組的注意事項

與字元串指針變量不同的是,具體元素的改變

char k[] = "i love";
k[0] = p;
//這個是正确的,這裡k[0]是一個char型變量
           

還有就是以下兩種情況是不等價的

char k[6] = "i love";
//不等價于
char k[6];
k[6] = "i love";
           

但是字元串指針變量下面的情況是等價的

char *p = "i love";
//等價
char *p;
p = "i love";
           

參考連結:https://blog.csdn.net/Cheney012/article/details/84950350

https://blog.csdn.net/qq_41950229/article/details/83515267

https://blog.csdn.net/sandwich125/article/details/79161030