char a 和char a 的不同

2021-10-01 09:43:20 字數 1407 閱讀 4941

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 存放在常量區,是無法...