搜尋

首頁  >  問答  >  主體

c++ - char* p="123"这句代码为什么是对的?

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

迷茫迷茫2808 天前1009

全部回覆(7)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-17 15:20:09

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

    回覆
    0
  • PHPz

    PHPz2017-04-17 15:20:09

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

    回覆
    0
  • PHPz

    PHPz2017-04-17 15:20:09

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

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 15:20:09

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

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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:20:09

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

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 15:20:09

    c語言留下的坑

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 15:20:09

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

    回覆
    0
  • 取消回覆