数组、字符串、指针的认识
1、C/C++中字符串都是以’\0’结尾的。稍不留神就会造成字符串越界,
例如: char str[9];
strcpy(str,”0123456789”); //其内容长度是11,而你的数组定
义长度只有10,在编程的时候,编译器不会报错,因为他不会检测你的长度
(至少Keil是这样的),数组是单独划分的一个用户内存区;然而如果你用下
面语句就会出问题了:
while(str[i] == '\0');
所以,一般在复制字符串时一定要为在字符串长度的基础上多申请一个字节内存给’\0‘
2、但是字符就是字符,不会自动给你加一个‘\0’的;
例如: char str[2] = {‘a’,‘’b‘};
这样子就只有只有两个元素,没有了’\0‘
3、字符串后面不能连接一个数组,而数组后面可以连接一个字符串;连接是指将连个内容
连成一串,运用指针的思想,传递的是地址,而不是内容本身;
看看一下代码会输出什么:
char str1[] = "Hello ZCM";
char str2[] = "Hello ZCM";
char *str3 = "Hello ZCM";
char *str4 = "Hello ZCM";
if (str1 == str2)
{
cout<<"str1 is same as str2\n";
}
else
{
cout<<"str1 is not same as str2\n";
}
if (str3 == str4)
{
cout<<"str3 is same as str4\n";
}
else
{
cout<<"str3 is not same as str4\n";
}
输出:
C/C++把常量字符串放到单独的一个内存区,即文字常量区,我的其他文章会对C++的代码区段和性质作个总结,这里不熬述了。str1和str2是两个字符串数组,我们会为他分配10个字节的空间并把“Hello ZCM”复制进去。所以这是两个初始地址不同的数组。而str3和str4是两个指针,我们无需为它分配内存以存储字符串的内容,我们只需要把他指向“Hello ZCM”中的内存地址就行了。由于“Hello ZCM”是字符常量,他在内存中只有一个拷贝,因此str3和str4指向的是同一个地址;
注意:部分代码为其他博客上看到的,加一自己的理解整理了一下,如有错误还望指正。