C語言 字元指標和字元陣列的區別

2021-10-10 10:28:42 字數 1765 閱讀 5342

在日常敲**的過程中我們會遇見這樣乙個問題

//例子1

void

mian()

void

mian()

例子2:這裡我們換成乙個指標,對指標int* a賦值,則不需要加取位址符號&,原因不難理解,上乙個例子對a賦值需要其位址,所以我們需要加&,而這裡指標int* a本身就是乙個位址,所以沒必要再加&取指標變數a本身的位址。

//例子3

void

mian()

綜上

我們不得不得出乙個疑問,陣列a和指標int* a在賦值時都沒有使用取位址符號&,那它們有什麼相同點呢?區別又在**呢?

首先我們先要搞清楚指標和陣列的工作原理

指標

void

mian()

我們畫圖說明:(位址隨便假設的)

我們可以看到:編譯器在記憶體中建立了兩個變數a和dwnum,dwnum的值為0,首位址為0x11,a的值為0x11(也就是dwnum的首位址),首位址為0x11。這樣指標a就指向的dwnum。

那麼在使用指標建立字串時,肯定和指標的工作原理一樣的,看下面這段**:

int

main()

執行結果都一樣:

到這裡我們不難得出乙個結論,當我們用指標建立字串的時候,編譯器會自動在記憶體中開闢一段連續記憶體存放每乙個字元,並將字串的首位址存放在指標char* a中。那麼我們可以畫圖理解(和指標的圖差不多的):

陣列同樣我們看例子:

void

main()

執行結果:

這裡我們看到了和指標一樣的結果,都是在記憶體中開闢一段連續的空間來存放資料,並將字元陣列的首位址賦值給了陣列名。那我們同樣可以畫乙個圖說明陣列的工作原理:

在功能上,字元指標和字元陣列都時在記憶體中開闢空間存放字串,並將首位址賦值給指標和陣列名。通過下標法(a[0])或者位址法(*a)對其資料進行訪問。

通過字元指標和字元陣列的圖我們可以發現不同在於,指標可以更改指向,所以可以直接更改其字串。而陣列的位址不能更改,其資料也不能直接賦值更改,只能用strcpy()等函式進行覆蓋。

int

main()

執行結果:

;//直接更改 報錯:表示式必須是可修改的左值

}

C語言 字元指標和字元陣列的區別

char str this is a string.是對字元指標進行初始化。此時,字元指標指向的是乙個字串常量的首位址,即指向字串的首位址。這裡要注意字元指標與字元陣列之間的區別。例如,有說明語句 char string this is a string.此時,string是字元陣列,它存放了乙個字...

字元陣列和字元指標的區別

在c語言中,對字串的操作主要有兩種方式,一是使用字元陣列,char str 二是使用字元指標。那麼二者有什麼區別呢?下面將分述二者的使用,最後進行比較。一 字元陣列 使用char str定義乙個字元陣列str,中括號內可以寫上數字表示陣列大小,也可以不寫。如果不寫數字,則必須為字元陣列提供初始值,以...

C語言中字元指標與字元陣列的區別

char是用來儲存單個字元的 例如 char ch a char是用來儲存多個字元的 例如 char ch 5 陣列本質上就是同時定義了多個變數,並對變數進行初始化當char最後乙個字元為 0 的時候,這是乙個字串 例如 char ch 6 字串也可以寫成 char ch 6 hello char ...