2016-11-22 58 views
-3

所以,指針直接分配給一個字符串?有什麼缺點?

const char *p= "hi"; 

,並

char a[2]= {'h', 'i'}; 
char *p= a; 

這些兩者都是語法正確,但有一個優於其他?我曾經認爲你不能做* p =「hi」;作爲「嗨」它沒有明確地分配任何內存,如情況2,其中它在數組中定義a [2]。

+1

第一個示例是無效的代碼。這是一個區別。 –

+6

'char * p =「hi」;'是一個字符串文字。這很可能會出現在程序的只讀部分,任何修改它的嘗試都是未定義的行爲。 'char a [2] = {'h','i'};'將'a'放在自動存儲器中,並且可以隨意修改。注意不要使用'a'作爲字符串,因爲它沒有終止NULL字節,而'p'的地方是。 – yano

+3

第一個示例需要'const' – Jonas

回答

0

在第一個示例中,p是隻讀的(const),只讀內存「更快」,因爲編譯器可以優化它。另外p是其實等於'h', 'i', '\0'

第二個p是可以修改的,你可以進行操作,比如p[0] = 'd'。但是如果你想在任何地方打印出來,你需要在字符串的末尾輸入。

+0

Downvoted,因爲這個答案的第一段是無稽之談。 –

+0

@ Cheersandhth.-Alf解釋 –

+0

好吧,第一個例子中的文字不是更快,因爲它是隻讀的。數據不一定放在只讀存儲器中(但試圖修改它就是UB)。它甚至不會編譯爲C++,應該提及。並且這兩個示例都可以優化。 它確實避免了第二個例子中的隱含複製,但這可能也會被優化掉。 –

相關問題