陣列不是基本型別,不能直接參與比較,陣列與字串及字元指標與字串比較其實比較的是二者的位址。
例:
int isequiv(char *t)
int main()
那麼為甚麼test與temp同字串「char」比較時結果會不一樣呢?其實t=="char"比較的是位址!
首先,當你這麼引用乙個字串的時候 "char",它表示儲存在程式的常量區的一串字串,它返回的就是這個常量區的字串位址比如假設這個位址是 0x004038b0 "char",那麼當你使用 char *temp = "char";的時候,temp就得到了這個常量字串的位址,也就是temp等於 0x004038b0
或許你可以試試
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"不是同乙個東西,但是內容相同
int isequiv(char *t)
以上面為例子
當你這麼比較的時候 if (t == "char") 編譯器是去比較t和"char"是不是同乙個東西,它們的值(字串的位址)是不是一樣,而不是比較它們的內容是不是一樣
由前面的講解可以知道
char* p1 = "char"; p1 和"char"的值是一樣的
char test = "char"; test 和 "char"的值不一樣,只是它們指向的字串內容一樣而已
要比較兩個字串的內容是不是一樣,用 strcmp()返回0就是一樣
比如,你那個函式可以改為
int isequiv(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...