读书人

字符数组小疑点

发布时间: 2012-09-14 23:00:49 作者: rapoo

字符数组小问题

C/C++ code
#include <iostream>using namespace std;void main(){    char str1[]="abc";    char str2[]="abc";    const char str3[]="abc";    const char str4[]="abc";    const char *str5="abc";    const char *str6="abc";    char *str7="abc";    char *str8="abc";    cout<<(str1==str2)<<endl;    cout<<(str3==str4)<<endl;    cout<<(str5==str6)<<endl;    cout<<(str7==str8)<<endl;}

求解释为什么输出的是
0
0
1
1

[解决办法]
str1 str2 str3 str4都是指向不同的栈存储区,故不等

str5 str6 str7 str8指向同一常量字符串,故相等
[解决办法]
http://topic.csdn.net/u/20110721/11/9a169841-de6a-4000-bdc1-c9d5ebe86b7c.html?56274
[解决办法]
探讨

str1 str2 str3 str4都是指向不同的栈存储区,故不等

str5 str6 str7 str8指向同一常量字符串,故相等

[解决办法]
探讨

char str1[]="abc";
char str2[]="abc";

const char str3[]="abc";
const char str4[]="abc";
这"abc”不是放在常量区的吗?

引用:

str1 str2 str3 str4都是指向不同的栈存储区,故不等

str5 str6 str7 str8……

[解决办法]
(str1==str2)这个返回值就是个bool变量,真就是1,假就是0.
[解决办法]
常量保持一份str5 str6 str7 str8指向同一地址
[解决办法]
根据楼主的现象,我分析也是如上所述!

但是在我的机器上运行,居然全是0(微软的编译器,Windows7的系统)

不知楼主用的什么编译器,和什么系统???
[解决办法]
探讨
C/C++ code

#include <iostream>
using namespace std;

void main()
{
char str1[]="abc";
char str2[]="abc";

const char str3[]="abc";
const char str4[]="abc";

const char *str5="abc……

[解决办法]
1、首先你输出的是0 1 是因为你输出的是一个 条件表达式的结果,就是判断是否相等的结果
2、你判断相等的值其实是一个 地址值,前面两个比较输出0 是因为前面四个数组都是你自己定义的一个数组并且他们会由系统自动分配一个新的内存并在其中保存 字符串"abc" ,而后两个输出 1 是因为你后面四个是指针,指向的都是一个常量字符串"abc"的地址,而在系统中 这个常量字符串的地址是固定的!所以其实他们四个指针都是指向同一个地址,所以比价的结果是1

读书人网 >C++

热点推荐