posts - 18,  comments - 2,  trackbacks - 0
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    
char str1[] = "abc";
    
char str2[] = "abc";
    
const char str3[] = "abc";
    
const char str4[] = "abc";
    
const char* str5 = "abc";
    
const char* str6 = "abc";

    cout 
<< boolalpha << (str1 == str2) << endl;
    cout 
<< boolalpha << (str3 == str4) << endl;
    cout 
<< boolalpha << (str5 == str6) << endl;
    
return 0;
}

分别输出false,false,true。str1和str2都是字符数组,每个都有其自己的存储区,它们的值则是各存储区首地址,不等;str3和 str4同上,只是按const语义,它们所指向的数据区不能修改。str5和str6并非数组而是字符指针,并不分配存储区,其后的“abc”以常量形 式存于静态数据区,而它们自己仅是指向该区首地址的指针,相等

boolalpha 用符号形式表示真假。
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    
float a = 1.0f;
    cout 
<< (int)a << endl;
    cout 
<< (int&)a << endl;
    cout 
<< boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?
    float b = 0.0f;
    cout 
<< (int)b << endl;
    cout 
<< (int&)b << endl;
    cout 
<< boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么?
    return 0;
}

...
cout < < boolalpha < < ( (int)a == (int&)a ) < < endl;
// 输出 false, 因为 float 的 1 和 int 的 1 在内存里的表示不一样。
...
cout < < boolalpha < < ( (int)b == (int&)b ) < < endl; // 输出 true
// 输出 true, 因为 float 的 0 和 int 的 0 在内存里的表示是一样的。

(int &)a 就表示 不管 a 是什么,我都当他是一个int变量。
从机器码的角度来说,变量a会被翻译成一个内存地址,(int &)a 就是说,这个内存地址里的内容它是一个整数。

(int)a 呢不同:如果 a 不是整数,就会按规则转换成整数,存入另一个地址(或临时变量)中去。

浮点数的 1.0f 在内存里是这样表示的:
0011 1111 1000 0000 00000000 00000000
这个32位二进制数被当作整数输出就是:
1065353216
而整数的 1 在内存里是这样表示的:
0000 0000 0000 0000 00000000 00000001

所以 (int)a != (int&)a

浮点的0和整数的0 在内存里都是:
0000 0000 0000 0000 00000000 00000000

所以 (int)b == (int&)b

posted on 2008-10-08 14:56 xuejzt 阅读(475) 评论(0)  编辑 收藏 引用 所属分类: 面试

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理



<2008年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜