字串 字元陣列 char指標 ???

2021-10-17 06:47:40 字數 1872 閱讀 1908

最近軒少閒來無事,乘爽妹子,華晨宇,楊紫這些頂流明星攢了一波大瓜,讓微博程式設計師痛苦加班之際,又拿起c++研究了一番,對字串略有所感,在此記錄一下。

大部分學c/c++的人都是從

printf

("hello, world!");

cout <<

"hello, world!"

<< endl;

開始。"hello, world!"是乙個字串常量,它是read-only的,所以當你使用

char

*str =

"hello"

;str[1]

='a'

;

時,當一執行**程式就會提醒你寫了一塊唯讀的區域

所以,當使用字串常量時不如給它加上const限定,在編譯階段就能提醒自己這個變數時不可改變的。比如這樣

const

char

*str =

"hello"

;str[1]

='a'

;/* vs中有紅色下劃波浪線提示 */

字串實際上就是乙個字元陣列,和所有的陣列一樣,在記憶體中有乙個結束標誌來標記字串的結束即『\0』,所以當執行const char *str = 「hello」;記憶體中的分布大致如字串常量會自動新增『\0』來作為結束,作為比較

const

char

*str =

"hello"

;const

char str1[5]

=;cout << str << endl;

/* hello */

cout << str1 << endl;

/* hello燙燙燙燙燙談? */

const

char

*str =

"hello"

;>> string str =

"hello"

;

別忘了包含標頭檔案。string會動態得為字串申請空間,比如hello實際上是乙個const char [6]型別。

使用string可以很方便得連線和查詢字串,比如

string s =

string

("hello")+

"world"

;bool contains = s.

find

("hello"

)!= string::nops;

注意

string s =

"hello"

+"world"

;/* error 字元陣列相加*/

前面說到 string 實際上被宣告成了乙個字元陣列,所以當strintg作為引數被傳遞時

void

fun(string s)

;

會拷貝整個字元陣列,這樣引數壓棧的開銷較大,所以一般使用string應用來傳遞引數,如果同時不想字串被子函式修改,則可將函式宣告為

void

fun(

const string &s)

;

以上就是關於字串的一些簡單用法,事實上string提供了一套十分豐富且強大的字串操作函式,關於這些函式我們下一節再聊。

字串陣列char 和字串指標char 的討論

相同點 1.char a 和char a在作為形參的時候完全相同。2.在初始化時,都可以使用常量字串,區別1.內容位址不同 char a abcd 此時 abcd 存放在常量區,然後在棧上分配記憶體給a,並指向 abcd 在常量區的首位址。對於指標本身a來說,它是可變的,允許修改,可以指向其他的位址...

字串指標與char型指標陣列

一 字串指標 字串是一種特殊的char型陣列,指向char型別陣列的指標,就是字串指標。與普通指標一樣,字串指標在使用前也必須定義。字串與char陣列的區別在於長度,字元會自動在尾部加上乙個長度 0 而char型陣列的長度就是其字元的個數。字串長度是字元個數 1。例 二 char型指標陣列 指標陣列...

字串char 和字串陣列char 的區別

字串char char str1 abcde 其實上面的char str1是字串常量,儲存在靜態儲存區,是唯讀的,也就是說它是const char str1 更好的表達它本身的意思。str1是乙個變數,代表的意思就是字串的第乙個字元的值 str1 可行 str1 2 f 不可行假如 char str...