读书人

摘引字符串字面值,为什么比较结果不符

发布时间: 2012-10-10 13:58:11 作者: rapoo

引用字符串字面值,为什么比较结果不符合预期?

C/C++ code
int compare(const char (&v1)[2], const char (&v2)[2]){    cout << v1 << " " << &v1 << " " << v2 << " " << &v2 << endl;    if (v1 < v2) return -1;    if (v1 > v2) return 1;    return 0;}int main(int argc, char *argv[]){    cout << compare("z", "w") << endl;    cout << endl;    system("pause");    return 0;}

返回值为-1,初步怀疑比较的是地址!但是v1明明是个值,怎么会这样?
求详细解释!顺便求vs2010里关系操作符.比如"<"的系统定义的代码在哪里,给出具体的查看方式!(我怀疑可能是重载的原因)

[解决办法]
再补一句我一贯以来的观点(当然高手觉得这是扯淡,但我本来就是菜鸟,跟高手想法不同很自然)
新手不要使用cout,使用printf和scanf,因此cout的重载很智能,往往新手自己都不知道自己写的是啥意思它就知道——对于新手学习这么语言来说,这一点的害处比它不知道啥意思还要大得多
[解决办法]
无法跟你解释,因为你缺的基础知识太多.等你认真看完C++ PRIMER 应该能理解.
#19 说得也不对... 可以看看我给的那个链接.

为了解这个问题,你需要掌握但是不限于:

1.类型转换 ,包括数组到指针的转换.
2.操作符重载.了解std::ostream 重载的operator<<;
3.函数重载.
4.引用是什么.

[解决办法]
探讨
自己讲了那么多,发现最早的问题可以精简一下!
可以这样问:
引用v1在cout里是值,在<里是地址!
但是通常情况下,如果v1引用int,那么在cout里是值,在<里还是值!
从这两个的区别里我产生疑问,为什么char就不一样?所以我想看关于<的代码!

但跟你们扯淡那么久之后,我发现也可能是cout的原因,所以我现在连cout的代码也想看!

[解决办法]
为了弥补< 运算符不能比较字符串,string.h 中定义这个专门的strcmp()来处理字符串的比较,

这个可以通过测试验证出来的;
第一种方法:你可以在输出v1,v2的时候用printf("%d,%d",v1,v2);这就证明v1和v2中存放的是地址,也就可以说明 是iostream类中对其做了特殊处理;

第二种方法,你可以用strcmp进行比较,可以得出正确错误,也就可以说明<没有做特殊的处理,

在32位操作系统下 任何指针在内存中,sizeof都是4,存放的是代表地址的数字;

好多东西可以通过验证得出依据来,再有一个

读书人网 >C++

热点推荐