97色伦色在线综合视频,无玛专区,18videosex性欧美黑色,日韩黄色电影免费在线观看,国产精品伦理一区二区三区,在线视频欧美日韩,亚洲欧美在线中文字幕不卡

信息化建設(shè) 網(wǎng)站惠州網(wǎng)站制作費(fèi)用

鶴壁市浩天電氣有限公司 2026/01/24 12:31:27
信息化建設(shè) 網(wǎng)站,惠州網(wǎng)站制作費(fèi)用,寧波網(wǎng)絡(luò)推廣平臺(tái),推廣賺錢網(wǎng)在 C 中#xff0c;string 是標(biāo)準(zhǔn)庫(kù)提供的字符串類#xff0c;指向 string 的指針#xff08;string*#xff09; 用法和指向普通自定義類型的指針邏輯一致#xff0c;但需結(jié)合 string 的特性理解。下面從核心概念、常見(jiàn)用法、避坑點(diǎn)三方面詳細(xì)講解。 一、核心概念#…在 C 中string是標(biāo)準(zhǔn)庫(kù)提供的字符串類指向string的指針string*用法和指向普通自定義類型的指針邏輯一致但需結(jié)合string的特性理解。下面從核心概念、常見(jiàn)用法、避坑點(diǎn)三方面詳細(xì)講解。一、核心概念string*是什么string*是指向string對(duì)象的指針存儲(chǔ)的是string對(duì)象在內(nèi)存中的首地址而非string存儲(chǔ)的字符串內(nèi)容。類比理解string s hello;→ 定義了一個(gè)string對(duì)象s它在內(nèi)存中占據(jù)一塊空間存儲(chǔ)字符串、長(zhǎng)度、容量等string* p s;→ 指針p指向s的內(nèi)存地址相當(dāng)于 “記錄了s的門牌號(hào)”。二、string*的核心用法結(jié)合代碼場(chǎng)景1. 定義與初始化string*必須指向已存在的string對(duì)象避免野指針常見(jiàn)初始化方式cpp運(yùn)行#include iostream #include string using namespace std; int main() { // 1. 定義string對(duì)象指針指向它最常用 string str apple; string* p1 str; // 取str的地址賦值給string*指針 // 2. 指針數(shù)組存儲(chǔ)多個(gè)string對(duì)象的地址你代碼中的核心場(chǎng)景 string str1 banana, str2 cherry, str3 date; string* arr[3] {str1, str2, str3}; // 指針數(shù)組每個(gè)元素是string* // 3. 動(dòng)態(tài)分配string對(duì)象較少用需手動(dòng)釋放 string* p2 new string(grape); // 堆上創(chuàng)建string對(duì)象p2指向它 return 0; }2. 解引用通過(guò)指針訪問(wèn)string對(duì)象指針本身只是地址必須通過(guò)解引用*才能訪問(wèn)指向的string對(duì)象進(jìn)而操作字符串內(nèi)容。操作場(chǎng)景語(yǔ)法示例說(shuō)明訪問(wèn)字符串內(nèi)容cout *p1;解引用指針輸出p1指向的string對(duì)象的字符串輸出apple比較字符串內(nèi)容if (*p1 *p2)解引用后用string重載的比較字符串內(nèi)容而非比較指針地址調(diào)用string成員函數(shù)(*p1).size()/p1-size()訪問(wèn)string的成員長(zhǎng)度、拼接、查找等-是解引用 成員訪問(wèn)的簡(jiǎn)寫(xiě)修改字符串內(nèi)容*p1 orange;解引用后直接賦值修改指向的string對(duì)象的內(nèi)容示例代碼cpp運(yùn)行int main() { string str apple; string* p str; // 1. 解引用訪問(wèn)字符串內(nèi)容 cout *p endl; // 輸出apple // 2. 調(diào)用string成員函數(shù)兩種寫(xiě)法等價(jià) cout (*p).size() endl; // 輸出5解引用后用.訪問(wèn)成員 cout p-size() endl; // 輸出5推薦- 是指針的成員訪問(wèn)符 // 3. 修改字符串內(nèi)容 *p banana; cout *p endl; // 輸出banana // 4. 拼接字符串 p-append( cherry); // 等價(jià)于 (*p).append( cherry) cout *p endl; // 輸出banana cherry return 0; }3. 指針數(shù)組string* arr[]string* arr[]是存儲(chǔ)string*指針的數(shù)組每個(gè)元素指向一個(gè)獨(dú)立的string對(duì)象排序時(shí)只需交換指針地址無(wú)需拷貝字符串內(nèi)容效率高。cpp運(yùn)行// 排序函數(shù)指針數(shù)組傳參n是元素個(gè)數(shù) void sortStrings(string* arr[], int n) { string* temp; // 臨時(shí)指針用于交換地址 for (int i 0; i n-1; i) { for (int j 0; j n-1-i; j) { // 關(guān)鍵解引用指針比較字符串內(nèi)容而非地址 if (*arr[j] *arr[j1]) { // 僅交換指針地址字符串內(nèi)容不動(dòng) temp arr[j]; arr[j] arr[j1]; arr[j1] temp; } } } } int main() { string a pear, b apple, c grape; string* arr[3] {a, b, c}; // 指針數(shù)組指向3個(gè)string對(duì)象 sortStrings(arr, 3); // 排序指針數(shù)組 // 遍歷指針數(shù)組輸出結(jié)果 for (int i 0; i 3; i) { cout *arr[i] endl; // 解引用arr[i]string*輸出字符串 } // 輸出apple → grape → pear return 0; }4. 動(dòng)態(tài)數(shù)組string*指向string數(shù)組若需要?jiǎng)討B(tài)創(chuàng)建多個(gè)string對(duì)象可讓string*指向string數(shù)組的首地址cpp運(yùn)行int main() { // 靜態(tài)string數(shù)組指針指向數(shù)組首元素 string strs[] {cat, dog, bird}; string* p strs; // 數(shù)組名strs等價(jià)于首元素地址strs[0] // 遍歷數(shù)組指針?lè)绞?for (int i 0; i 3; i) { cout *p ; // 輸出cat dog bird p; // 指針后移指向下一個(gè)string對(duì)象 } // 動(dòng)態(tài)string數(shù)組堆上分配 string* pArr new string[3]{red, green, blue}; for (int i 0; i 3; i) { cout pArr[i] ; // 等價(jià)于*(pArri)輸出red green blue } delete[] pArr; // 動(dòng)態(tài)數(shù)組需手動(dòng)釋放 return 0; }三、避坑點(diǎn)新手最容易錯(cuò)1. 不要直接把string對(duì)象賦值給string*錯(cuò)誤寫(xiě)法你最初的問(wèn)題cpp運(yùn)行string str apple; string* p str; // ? 錯(cuò)誤str是string對(duì)象不是地址類型不匹配正確寫(xiě)法cpp運(yùn)行string* p str; // ? 取str的地址賦值給string*2. 避免野指針指針指向已銷毀的string對(duì)象cpp運(yùn)行string* p; { string temp hello; p temp; // temp是局部變量出括號(hào)后銷毀 } cout *p; // ? 未定義行為p指向已釋放的內(nèi)存野指針3. 指針比較 vs 字符串內(nèi)容比較string*直接用/比較的是內(nèi)存地址而非字符串內(nèi)容必須解引用后比較cpp運(yùn)行string s1 banana, s2 apple; string* p1 s1, *p2 s2; if (p1 p2) { cout 指針地址p1 p2; // 可能成立地址隨機(jī)但無(wú)業(yè)務(wù)意義 } if (*p1 *p2) { cout 字符串s1 s2; // 成立banana apple符合業(yè)務(wù)邏輯 }4. 范圍 for 遍歷指針數(shù)組的注意事項(xiàng)for(string* p : arr)中arr必須是固定長(zhǎng)度的數(shù)組編譯器能推導(dǎo)長(zhǎng)度若數(shù)組長(zhǎng)度通過(guò)參數(shù)傳入需改用普通 for 循環(huán)cpp運(yùn)行// 通用寫(xiě)法適配任意長(zhǎng)度n void printStrings(string* arr[], int n) { for (int i 0; i n; i) { cout *arr[i] endl; } }四、總結(jié)string*核心口訣定義string* p str;指針指向string對(duì)象的地址訪問(wèn)*p取對(duì)象p-成員調(diào)函數(shù)如p-size()比較解引用后比內(nèi)容*p1 *p2不要直接比指針數(shù)組string* arr[]存多個(gè)string地址排序交換地址更高效避坑不賦野指針、不直接賦值string對(duì)象給string*。
版權(quán)聲明: 本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)聯(lián)系我們進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!