VC疑问之一
//VC的bool类型很耐人寻味,下面的程序对它进行一些测试
//同时,发现了一个问题,在cout结构内的char变量地址时,出现乱码
//请大家解惑
#include <iostream.h>
//#pragma pack(1)
struct sizetest
{
bool a;
char b;//这里改为 bool b,则下面的输出正常
};
//---------------------------------------------------------------
void test()
{
char add4;
int add3;
sizetest add2;
int add1;
bool aa;
aa = 2;//编译器虽然给出警告,但实际汇编代码是:aa = 1
add2.a = true;
add2.b = 'a';
cout << "bool size:" << sizeof(aa) << endl;// bool 类型大小为 1 byte
if (aa == true) cout << "true" << endl;//等价于 if (aa == 1)
if (aa == false) cout << "false" << endl;//等价于 if (aa == 0)
if (aa) cout << "not false" << endl;//等价于 if (aa!=0)
if (!aa) cout << "not true" << endl;//等价于 if (aa == 0)
cout << "add1 address:" << int(&add1) << endl;
cout << "add2 address:" << int(&add2) << endl;
cout << "size of add2:" << sizeof(add2) << endl;
cout << "add2.a address:" << int(&add2.a) << endl;
cout << "add2.b address:" << (&add2.b) << endl; //请回答:这一行为何输出是乱码?如果把 b 类型改为 bool 或 int 则正常(我这里是这样)
cout << "add2.b address:" << int(&add2.b) << endl;
cout << "add3 address:" << int(&add3) << endl;
}
void main()
{
test();
}