C語言字元指標訪問

來源:互聯網
上載者:User

      因為一道面試的題目,所以抓來了譚浩強的《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++ 標準的內容:”
     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.