1. 程式人生 > >字串指標與字元陣列的區別

字串指標與字元陣列的區別


       陣列和指標都可以在它們的定義中用字串常量進行初始化,儘管看上去一樣,底層的實現機制卻不相同。

       定義指標時,編譯器並不為指標所指向的物件分配空間,它只是分配指標本身的空間,除非在定義的同時賦值給指標一個字串常量進行初始化。例如:下面的定義建立了一個字串常量(為其分配了記憶體):

       char *p=”abcdefg”;

       注意只有對字串常量才是如此,不能指望為浮點數之類的常量分配空間,如:

       Float *p=3.14;  /*錯誤,無法通過編譯*/

下面結合一個例項談談初始化指標時建立的字串常量與陣列中的字串的區別:

  1. 在ANSI C中,初始化指標時所建立的字串常量被定義為只讀。如果試圖通過指標修改這個字串的值,程式就會出現未定義的行為。在有些編譯器中,字串常量被存放在只允許讀取的文字段中,以防止它被修改。
  2. 陣列也可以用字串常量進行初始化:

       Char a[]=”abcdefg”;

       如指標相反,由字串常量初始化的陣列是可以修改的。其中的單個字元在以後可以改變。

       下面是一個在vc6中的一個例子,完成將一個字串中的所有大寫字母全部轉換為小寫字母的功能: