爲了節省內存,C/C++把常量字符串放到單獨的一個內存區域。當幾個指針賦值給相同的常量字符串時,它們實際上會指向相同的內存地址。但用常量初始化數組,情況卻有所不同。
#include<iostream>
using namespace std;
int main()
{
char str1[] = "hello world";
char str2[] = "hello world";
char* str3 = "hello world";
char* str4 = "hello world";
if( str1==str2 )
cout << "str1 == str2 " << endl;
else
cout << "str1 != str2 " <<endl;
if( str3==str4 )
cout << "str3 == str4 " << endl;
else
cout << "str3 != str4 " << endl;
return 0;
}
可以先猜一下,輸出的結果是什麼。
str1 和 str2 是兩個字符串數組,會爲它們分配兩個長度爲12個字節的空間,並把內容分別複製到數組中去。這兩個初始地址不同的數組,str1 和str2的值也不同。
str3 和str4是兩個指針,無須爲它們分配內存以存儲字符串的內容,而只需要把它們指向常量字符串在內存中的地址就可以。因此str3和str4指向的是同一個地址