c++ - char* p="123"这句代码为什么是对的?
迷茫
迷茫 2017-04-17 15:18:09
0
7
1035

如题,C风格字符串,"123"不是const char *类型的常量么?为什么赋给一个普通指针是可以的呢?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(7)
伊谢尔伦

這樣做雖然不會報錯,但是試圖對p指向的字串123進行修改將造成記憶體違規存取。因為"123"是字串常數,存放在唯讀儲存區。之所以要求使用const char*是為了避免程式設計師錯誤的對123進行修改。

PHPzhong

初學者試答
"123"是一個const char 類型的對象,const char * p 應該從右往左讀,意思是p 是一個指針,指向的對像是const char 類型,這不正好麼? 同理,你在後面加一句p = "456"; 也是對的,只要求p指向的對像是const char 即可。

PHPzhong

char *p = "123";是否表示是一個字元陣列?即字串

左手右手慢动作

編譯加入-Wall後會看見警告。

 warning: ISO C++11 does not allow conversion from string literal to
      'char *' [-Wwritable-strings]
        char *p = "hello";
               ^
大家讲道理

char *p = "123";實際上是兩個過程,在常數區分配字串空間,宣告字元指標p,p指向這個字串所處記憶體空間,若有不對請立即指正

巴扎黑

c語言留下的坑

左手右手慢动作

這是為了相容c而留下來的

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板