C/C++中每个字符串都以字符'\0'作为结尾。
C/C++把常量字符串放到单独的一个内存区域。当几个指针赋给相同的常量字符串时,它们实际上指向相同的内存地址。但用常量内存初始化数组,情况却不同。
例:
int _tmain(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 are same.\n");
else
printf("str1 and str2 are not same.\n");
if(str3==str4)
printf("str3 and str4 are same.\n");
else
printf("str3 and str4 are not same.\n");
return 0;
}
Result:
str1 and str2 are not same.
str3 and str4 are same
str1和str2是两个字符串数组,会为它们分配两个长度为12个字符的空间,并把“hello world”的内容分别复制到数组中去。这是数组不同的数组,因此str1和str2 的值也不同
str3和str4是两个指针,无须为它们分配内存以存储字符串的内容,只需要把它们指向“hello world”在内存中的地址就可以了。
由于“hello world”是常量字符串,它在内存中只有一个拷贝,因此str3和str4指向的是同一个地址。