因為一道面試的題目,所以抓來了譚浩強的《C語言程式設計》翻了下,其中譚老師在240頁10.22例中,字元指標指向的字元,可通過像字元數組,使用[]來訪問,即: char * a = “I love china”;
printf("The sixth charcter is %c\n",a[5]);
我便突發奇想,可否通過字元指標來改變其指向的內容,即
VS2005的環境下,便會出 “0xC0000005: 寫入位置 0x00418bf0 時發生存取違規”,而如果寫成如下,則可正常執行
也就是說,通過字元指標對字元數組進行“寫操作”是允許的,而之前的錯誤又是一個運行錯誤,類似與XCODE裡的EXC_BAD_ACCESS的錯誤,猜測可能的原因是指定字元指標並直接用字串初始化,所開闢的記憶體空間,並非棧上的空間 是const 指標引出的錯誤,所以若有“char * a = “I love china”;”的用法,因寫成“const char * a = “I love china”;”,這樣當編譯“寫操作”代碼是,編譯器便會報錯。同時,求教“char * a = “I
love china”;”的記憶體空間。
這裡是這個問題的答案http://blog.csdn.net/defonds/article/details/6260429
“因此 C++ 中的字串字面量才可稱為字串常量,而且首地址及各元素地址跟C一樣,都是地址常量運算式。
字串字面量在C中具有數群組類型 char[N],在 C++ 中則為 const char[N],在運算式中當發生數組到指標的轉換時,對應的等效指標類型分別是 char* 和 const char*,因此,在 C 中,char *p = “ABCDEF” 是合法的,但讓人驚奇的是,上述語句在 C++ 中也是合法的!看起來一個 pointer to const char 指標被賦予了 pointer to char 指標,似乎違反了 C++ 中指標轉換的 more cv-qualified 原則。其實字串字面量在
C++ 中存在兩種轉換,一種轉換依據當前上下文環境,另一種遵循數組到指標的轉換,C++ 標準的內容:”