指向常量字符串的指針

由於字符串在編程時使用的頻率非常高,爲了優化,很多語言都對字符串做了特殊的規定。

爲了節省內存,C/C++把常量字符串放到單獨的一個內存區域。當幾個指針賦值給相同的常量字符串時,
它們實際上會指向相同的內存地址。但用常量初始化字符數組,情況確有所不同。下面看例子

int main(int argc,_TCHAR* argv[])
{

      char str1[]="hello world";
      char str2[]="hello world";

       char* str3="hello world";
       char* str4="hello world";

      if(str1==str2)
        printf("str1 and str2 is same.\n");
      else
        printf("str1 and str2 is not same.\n");
   
      if(str3==str4)
        printf("str3 and str4 is same.\n");
      else
        printf("str3 and str4 is not same.\n");
}

 運行結果如下:

str1和str2是兩個字符串數組,我們會爲它們分配兩個長度爲12字節的空間,並把“hello world"的內容分別複製到數組中去。
這是兩個初始地址不同的數組,因此str1和str2的值也不同。所以輸出的第一行是”str1 and str2 is not same。

str3和str4是兩個指針,我們無需爲它們分配內存以存儲字符串的內容,而只需要把它們指向“hello world"在內存中的地址就可。
由於”hello world"是常量字符串,它在內存中只有一個拷貝,因此str3和str4指向的是同一個地址,所以比較str3和str4的結果是
相同的

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章