char*p="IAMASTUDENT";p[3]=0;std::cout
關(guān)于C++的一道題
慕斯王
2019-03-29 22:09:33
TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
在回答之前,先給樓主提個(gè)意見:既然是C++問題,那就應(yīng)該盡量使用STL,如string,vector。首先要知道C++使用四種不同的方案來存儲數(shù)據(jù)(它們的區(qū)別在于數(shù)據(jù)保留在內(nèi)存中的時(shí)間):自動存儲:在函數(shù)定義中聲明的變量(包括函數(shù)參數(shù))為自動存儲的。靜態(tài)存儲:在函數(shù)定義外定義的變量和使用關(guān)鍵字static定義的變量為靜態(tài)存儲的。線程存儲(C++11)動態(tài)存儲:運(yùn)行時(shí)用new運(yùn)算符分配的內(nèi)存,一直存在,直到delete運(yùn)算符將其釋放或程序結(jié)束為止,有時(shí)也被稱為自由存儲或堆。定義指針char*p="IAMASTUDENT"時(shí),編譯器并不為指針?biāo)赶虻膶ο蠓峙淇臻g,它只是分配指針本身的空間,除非在定義時(shí)同時(shí)賦給指針一個(gè)字符串常量進(jìn)行初始化。這里的字符串常量是靜態(tài)存儲的,而且被定義為只讀。如果試圖通過指針修改這個(gè)字符串常量的值,程序就會出現(xiàn)undefinedbehavior。所以,這里初始化指針時(shí)最好用const標(biāo)記該指針指向的字符串為常量。另外一個(gè)需要注意的是,定義數(shù)組charp[]="IAMASTUDENT"時(shí),數(shù)組p的內(nèi)容是自動存儲的。
舉報(bào)