| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3348 人关注过本帖, 2 人收藏
标题:一道淘宝的笔试题_请大吓请点!
只看楼主 加入收藏
vincentcity
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-10-23
收藏(2)
 问题点数:0 回复次数:20 
一道淘宝的笔试题_请大吓请点!
#include<iostream.h>

void main()
{
    char str1[]="abc";
    char str2[]="abc";
//    char *str = str1;
    const char str3[]="abc";
    const char str4[]="abc";
    const char *str5="abc";
    const char *str6="abc";
    if (str1==str2) cout<<"TRUE"<<endl;  
    else cout<<"FALSE"<<endl;           //FALSE;

    if (str3==str4) cout<<"TRUE"<<endl;
    else cout<<"FALSE"<<endl;        // FALSE;
    
   if (str5==str6) cout<<"TRUE"<<endl;   
    else cout<<"FALSE"<<endl;           //TRUE

}

为什么输出会是假呢?
搜索更多相关主题的帖子: 笔试 淘宝 
2008-10-23 22:51
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
要知道数组名可是地址!
明明是两个数组,虽然内容是一样的.但地址是绝对不会等的!

2008-10-23 23:15
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
str5和str6就不同了...都指向同一个地址...相等....

2008-10-23 23:16
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
这真是淘宝的笔试题吗?
没什么难度,就是迷惑那些基础不牢的....

2008-10-23 23:17
tjxix
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-3
收藏
得分:0 
最后一个为什么会是TRUE啊?
为什么没有把str5和str6那两句里的"abc"当作不同的字符串而分别赋予不同的地址?按书上说的应该是当作内容一样,但地址不同的两个字符串啊。

我在这个代码里加了几句,用dev c++编译:

int main()
{
    char str1[]="abc";
    char str2[]="abc";
//    char *str = str1;
    const char str3[]="abc";
    const char str4[]="abc";
    const char *str5="abc";
    const char *str6="abc";
//增加的地方:
    char *str7="abc";
    char *str8="abc";

   
    if (str1==str2) cout<<"TRUE"<<endl;
    else cout<<"FALSE"<<endl;           //FALSE;

    if (str3==str4) cout<<"TRUE"<<endl;
    else cout<<"FALSE"<<endl;        // FALSE;

   if (str5==str6) cout<<"TRUE"<<endl;
    else cout<<"FALSE"<<endl;           //TRUE
//增加的地方:
    if (str7==str8) cout<<"TRUE"<<endl;
    else cout<<"FALSE"<<endl;           
   
       if ("abc"=="abc") cout<<"TRUE"<<endl;
    else cout<<"FALSE"<<endl;           //TRUE

}

最后的结果是:

FALSE
FALSE
TRUE
TRUE
TRUE

谁能来解释一下最后三个TRUE,编译器为什么没有把字符串"abc"区别开来?
谢谢!


[[it] 本帖最后由 tjxix 于 2008-10-24 10:38 编辑 [/it]]
2008-10-24 10:36
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
首先 解释一下最后一个ture 因为字符串常量 就是代表它们的首地址
倒数第二个 和 第三个 char *str7="abc"和const char *str5="abc" 都是字符串常量也就是 说 不能被修改的
它们的地址 也就是一样的
虽然数组名是地址 那这也是 这个数组的首地址 只能指向这个数组
所以不同的数组名 只能指向自己的数组 所以它们的地址是不一样的
2008-10-24 11:35
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
现在笔试题都是考基础。。很少考很难的

学习需要安静。。海盗要重新来过。。
2008-10-24 11:41
maibarry
Rank: 1
等 级:新手上路
帖 子:54
专家分:7
注 册:2008-10-21
收藏
得分:0 
C语言忘记好了。现在的语言都不用指针了。
2008-10-24 12:02
lockhawk
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2008-9-17
收藏
得分:0 
声明一个数组的时候等于声明了一个独立空间。虽然 str1和str2 str3和str4 贮存的内容相同,但不是同一个空间,所以他们的地址不同。str5和str6是指针,两个指针可以同时指向同一个地址。
if("abc"=="abc")  这个当然是true了。就好象if(3==3)一样

人生最大痛苦:虽然不明白你们说什么,但还是要听!
2008-10-24 14:31
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
回复 9# lockhawk 的帖子
if("abc"=="abc")  这个当然是true了。就好象if(3==3)一样
纠正一下 字符串常量就是代表这个字符串的头指针所以if("abc"=="abc") 就是 在比较 两个指针
2008-10-24 16:29
快速回复:一道淘宝的笔试题_请大吓请点!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013002 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved