閱讀511 返回首頁    go 技術社區[雲棲]


指針與字符串:(const)char *p2 = "lmj";定義的是一個字符串常量!符串常量,正因為是常量,所以它內部的字符是不允許修改的。

int main(){

   char *p2 = "lmj";
   *p2 = 'L';

   printf("%s", p2);

  return 0;

}

程序運行結果:段錯誤


看起來似乎是可行的,但這是錯誤代碼,錯在第2行。首先看第1行,指針變量p2指向的是一塊字符串常量,正因為是常量,所以它內部的字符是不允許修改的。

有人可能搞蒙了,這裏的第1行代碼char *p2 = "lmj";跟第一種方案中的第2行代碼char a[] = "lmj";不是一樣的麼?這是不一樣的。

char a[] = "lmj";定義的是一個字符串變量!
char *p2 = "lmj";定義的是一個字符串常量!嚴格來說,應該寫成const char *p2 = "lmj";,前麵加個常量修飾符


定義字符串的時候,應該考慮清楚:以後程序是否對字符串的內容進行修改,如果修改,定義為數組形式,若不修改,定義為指針形式,定義為一個字符串常量

 

最後更新:2017-04-03 16:48:54

  上一篇:go 返回局部變量的地址
  下一篇:go 指針的疑問