char陣列 char指標與字串常量的比較

2021-08-07 09:25:49 字數 1695 閱讀 8002

陣列不是基本型別,不能直接參與比較,陣列與字串及字元指標與字串比較其實比較的是二者的位址。

例:[cpp]view plain

copy

intisequiv(

char

*t)  

intmain()    

那麼為甚麼test與temp同字串「char」比較時結果會不一樣呢?其實t=="char"比較的是位址!

首先,當你這麼引用乙個字串的時候 "char",它表示儲存在程式的常量區的一串字串,它返回的就是這個常量區的字串位址比如假設這個位址是 0x004038b0 "char",那麼當你使用 char *temp = "char";的時候,temp就得到了這個常量字串的位址,也就是temp等於 0x004038b0  

或許你可以試試

[cpp]view plain

copy

char

* p1 = 

"char"

;  char

* p2 = 

"char"

;  char

* p3 = 

"char"

;  char

* p4 = 

"char"

;  

這裡的 p1 p2 p3 p4 的值都一樣,都是指向常量區字串 "char", 比如上面的 0x004038b0  

然而當你這麼只用的時候 

char test = "char";  

這裡情況就和上面的不一樣了,這樣寫的時候,編譯器並不是讓test也指向常量區的字串"char",而是在本地堆疊分配了一段和"char"一樣大的空間,如何把常量區字串"char" 拷貝到test

可以這麼理解

char* p1 = "char"; p1 和 常量區的"char"是同乙個東西,位址相同

char test = "char"; test和 常量區的"char"不是同乙個東西,但是內容相同

[cpp]view plain

copy

intisequiv(

char

*t)     

以上面為例子

當你這麼比較的時候  if (t == "char") 編譯器是去比較t和"char"是不是同乙個東西,它們的值(字串的位址)是不是一樣,而不是比較它們的內容是不是一樣

由前面的講解可以知道

char* p1 = "char";    p1 和"char"的值是一樣的

char test = "char";  test 和 "char"的值不一樣,只是它們指向的字串內容一樣而已

要比較兩個字串的內容是不是一樣,用 strcmp()返回0就是一樣

比如,你那個函式可以改為

[cpp]view plain

copy

intisequiv(

char

*t)   

ps:你要理解兩個感念,

同乙個東西

內容相同的兩個東西

注:字串比較用用strcmp()函式,strcmp(test,"char")及strcmp(temp,"char")!

**:

char陣列與char指標

1 以字串形式出現的,編譯器會在結尾自動新增 0,思考,為什麼?存在的c語言方法,如strlen s 計算字串的長度,其中s指標。strlen要計算字串長度,必須知道 是結尾,因此使用 0表示結尾。只有字元陣列才有 0的概念,其它型別 int 的陣列沒有這個概念。因為其他型別的陣列或者指標,沒有st...

char陣列與char指標

char陣列與char指標 1 以字串形式出現的,編譯器會在結尾自動新增 0,思考,為什麼?存在的c語言方法,如strlen s 計算字串的長度,其中s指標。strlen要計算字串長度,必須知道 是結尾,因此使用 0表示結尾。只有字元陣列才有 0的概念,其它型別 int 的陣列沒有這個概念。因為其他...

char陣列與char指標

1 以字串形式出現的,編譯器會在結尾自動新增 0,思考,為什麼?存在的c語言方法,如strlen s 計算字串的長度,其中s指標。strlen要計算字串長度,必須知道 是結尾,因此使用 0表示結尾。只有字元陣列才有 0的概念,其它型別 int 的陣列沒有這個概念。因為其他型別的陣列或者指標,沒有st...