C 字串指標與字元陣列的理解

2021-10-21 07:22:07 字數 2378 閱讀 5179

字串指標:

1 書寫格式

const

char

* p =

"abcdef"

;//必須使用const

記憶體四區包含**區、棧、堆、全域性區。全域性區內儲存常量、全域性變數、靜態變數,堆中存放使用new後者malloc動態申請儲存空間 儲存的變數,棧中存放區域性變數,可由程式釋放。

為什麼要加const修飾符?因為「aaaaa」字串儲存在 常量區,不能被改變。因此採用const char* p的形式。下面的做法是錯誤的:

p[0]

='a'

;

2 訪問

1)直接輸出p,遇到\0停止輸出

const

char

* p =

"abcdef"

;cout << p << endl;

//直接輸出

abcdef

請按任意鍵繼續.

..

2)使用訪問單個字元

const

char

* p =

"abcdef"

;cout << p[3]

<< endl;

//使用訪問

d請按任意鍵繼續...

p[0]=

'a';

//此種寫法是錯誤的

2 可修改指標指向的字串

const

char

* p =

"abcdef"

;cout << p << endl;

cout << p[3]

<< endl;

p ="hijklmn"

;//修改指向

cout << p << endl;

system

("pause");

abcdef

dhijklmn

請按任意鍵繼續.

..

3 可以對指標進行修改

const

char

* p =

"abcdef"

;cout << p << endl;

cout << p[3]

<< endl;

p ="hijklmn"

;cout << p << endl;

p = p +1;

//指標修改

cout << p << endl;

system

("pause");

abcdef

dhijklmn

ijklmn

請按任意鍵繼續.

..

總結:

字串指標可以指向不同的字串,但是不能修改字串的值,類似於const char* p;

字串指標可以進行運算,或者通過訪問;

字串指標可以直接通過輸出指標來輸出內容;

字串指標=賦值時,要檢查是否是null,並且先釋放舊空間,並建立新空間;

字串在全域性區,而指標在棧。

字元陣列:

1 書寫格式

char str=

"abc"

;

字元陣列的名str,可以當成常量指標看待,類似於char *const p,也就是陣列名不能執像指標似的指向新的字串,也不可以做運算。可以修改的是分配的記憶體空間,其分配的記憶體空間在棧中,長度固定。

上面的形式,雖然是整體「abc」賦值,但是實際上是拆分開後進行的賦值:

char st=

;

2 訪問

cout << st[0]

<< endl;

cout << st << endl;

cout << st +

1

bcst = st +1;

//錯誤,st不能改變

st =

"asd"

;//錯誤,不能像指標變數改變指向,只能通過乙個乙個元素的改變

總結:

字串陣列與字串指標相反,可以更改字串內容,但是不能進行整體賦值,只能乙個乙個的賦值,類似於char* const p;

字串陣列名稱不能進行運算;

字串陣列記憶體空間在棧中。

C 字元 字串 字元陣列 字串指標 指標陣列

一 c 字元 字串 字元陣列 字串指標 指標陣列 前言 一 字元指標 字元陣列 二 字串指標 三 字串 指標陣列 四 常用方法 參考為了深入理解c 並時常回顧學過的知識點,對c 知識點進行記錄總結。參考1字元指標的儲存方式 字元指標變數本身是乙個變數,用於存放字元 字串的首位址。字串本身是存放在以該...

C 字串指標與字串陣列

在做面試100題中第21題時,發現char astr abcdefghijk 0 和char astr 有點區別,以前一直以為是一樣的,但是在該程式中採用字串指標執行一直出錯。後來在網上查查,果然發現大大的不同。分析 當你需要修改字串時,採用指標指向該字串編譯通過但是執行出錯,而採用字串陣列時不會出...

C 字串指標與字元陣列

visual studio 2012 系統分配時儲存位置不一樣 字串指標在初始化時儲存在靜態區是常量,初始化後不能修改 字元陣列 是存放在棧中的,值是可以修改的 include stdafx.h include include include include include include char...