區(qū)別string對象(字符串對象)和字符串常量
一、字符串對象
在C++中,字符串常量是指程序中固定不變的字符串值,例如:"hello world"。字符串常量存儲在只讀的靜態(tài)存儲區(qū)域,通常稱為常量區(qū)或靜態(tài)存儲區(qū),編譯器會在程序編譯時為其分配內(nèi)存空間。由于字符串常量的值是固定的,因此它們不能被修改。
字符串對象是C++標準庫中提供的一個類,用于表示可變的字符串值。我們可以使用string類來創(chuàng)建和操作字符串對象,例如:
#include <string>
using namespace std;
int main() {
string str1 = "hello";
string str2 = "world";
string str3 = str1 + " " + str2;
cout << str3 << endl; // 輸出 "hello world"
return 0;
}
這里的string是一個類。
在這個例子中,我們使用了string類來創(chuàng)建字符串對象str1、str2和str3,并對它們進行了一些操作,例如拼接字符串。與字符串常量不同,字符串對象中的值是可以修改的。
需要注意的是,雖然字符串常量和字符串對象都表示字符串值,但它們在內(nèi)存中的存儲方式不同。字符串常量存儲在只讀的靜態(tài)存儲區(qū)域,而字符串對象通常是在堆?;蚨焉戏峙鋬?nèi)存來存儲。這也是為什么字符串常量的值是不可修改的,而字符串對象的值是可變的。
二、字符串常量
const char* str = "Hello";
*str = 'h'; // 編譯器報錯
這個代碼片段會導(dǎo)致編譯器報錯,因為str指針指向的是字符串常量的首地址,而字符串常量是只讀數(shù)據(jù),不允許被修改。因此,由于const char*聲明的指針是指向常量的指針,它所指向的字符數(shù)組是不可修改的。
字符串常量"Hello"被存儲在常量區(qū),常量區(qū)的內(nèi)存只有讀取權(quán)限,沒有寫入權(quán)限,因襲他們的值在程序運行期間不能改變。