char *a = "dghtql"
;中的a是乙個常量指標,指向「dghtql」
這個字串,並且不能通過操作指標a
來改變「dghtql」
。存放於常量區,只能通過指標來訪問,不能通過指標來修改和賦值。如scanf()
等方法不能用於a
上。
而char a = "dghtql"
;中的a
既是陣列名又是指向第乙個字母d
的指標,陣列是存放於棧空間的,可以通過指標訪問並修改字串的內容。
在讀取速度方面,因為在棧上的讀取速度快於靜態儲存區,因此char a
的讀取速度大於char *a
。
兩者在賦值時刻上也有差別,char*a
賦值於編譯時(常量),而char a
賦值於執行時。
最後,使用strcat()
方法時,可以將指標指向的字串拼接在陣列後面,但是絕對不可以將字元陣列內容拼接在指標指向的字串後面。
#include
#include
using
namespace std;
intmain()
//output
segmentation.cpp: in function 'int main()'
:segmentation.cpp:7:
15: warning: iso c++ forbids converting a string constant to 'char*'
[-wwrite-strings]
char
* b =
"yesyes!";^
~~~~
~~~~
dghtqlyesyes!
儘管報錯稱:iso c++ 禁止將字串常量轉為char*型別,但是最終輸出了正確答案。
我們反過來試試:
#include
#include
using
namespace std;
intmain()
//output
segmentation.cpp: in function 'int main()'
:segmentation.cpp:7:
15: warning: iso c++ forbids converting a string constant to 'char*'
[-wwrite-strings]
char
* b =
"yesyes!";^
~~~~
~~~~
這回警告之後,根本就沒有輸出正確答案。 char a 和char a 的區別
char a hello 中的a是指向第乙個字元 a 的乙個指標 char a 20 hello 中陣列名a也是執行陣列第乙個字元 h 的指標 但二者並不相同 看例項 把兩個字串相加 結果 對比 結果 把字串加到指標所指的字串上去,出現段錯誤,本質原因 d 0123456789 存放在常量區,是無法...
char a 和char a的比較
指標和陣列存在著一些本質的區別。當然,在某種情況下,比如陣列作為函式的引數進行傳遞時,由於該陣列自動退化為同型別的指標,所以在函式內部,作 為函式引數傳遞進來的指標與陣列確實具有一定的一致性,但這只是一種比較特殊的情況而已,在本質上,兩者是有區別的。請看以下的例子 char a 1234567 ch...
char a 與char a 的區別
char a hello 中的a是指向第乙個字元 a 的乙個指標 char a 20 hello 中陣列名a也是執行陣列第乙個字元 h 的指標 但二者並不相同 看例項 把兩個字串相加 結果 對比 結果 把字串加到指標所指的字串上去,出現段錯誤,本質原因 d 0123456789 存放在常量區,是無法...