在C++语言中,有如下代码:
- char a;
- int b;
- int c;
- a='1';
- b=1;
- printf("a = %x /r/n",a);
- printf("b = %x/r/n",b);
- c=a;
- printf("c = %x/r/n",c);
输出的结果是
a = 31
b = 1
c = 31
请按任意键继续. . .
这里 int型是4Byte char型是1Byet。
a=‘1’ 这条语句执行后,会在内存中分配1个字节大小的内存空间,在这个空间里存储的内容是0x 31,即字符1的ASC码的16进制表示。
b=1 这条语句执行后会在内存中分配一个4个字节大小的空间,在这个空间内存储的内容是0x 00000001。
c= a ; a的长度小于c的长度因此赋值不会产生数据的丢失。
看如下代码:
- char a;
- int b;
- a=49;
- b=49;
- printf("a = %x /r/n",a);
- printf("b = %x /r/n",b);
输出结果是:
a = 31
b = 31
请按任意键继续. . .
这里 a =49; 49 c++编译器默认为10进制,49的16进制表示为 0x31 那么在a所在的内存中存放的依然是0x 31。
同理b在内存中存放的也是0x31。
看下面的代码:
- char a;
- int b;
- a=49;
- b=49;
- printf("a = %x /r/n",a);
- printf("b = %c /r/n",b);
输出的内容是:
a = 31
b = 1
请按任意键继续. . .
这里b输出的是1,因为b是按照字符型来输出的。
通过以上3个例子要说明的是,要看淡变量类型,不要被过多的变量类型搞的晕头转向,看问题要看本质。不同的变量类型反映在内存中,其实只是开辟的内存大小有区别甚至内存大小都一样,关键还是要看内存空间存储的二进制码是什么。两个变量只要是在内存中存储的二进制码一样 无论这两个变量是什么类型,我们都可以认为他们是相等的。
看如下代码:
- char a;
- int b;
- float c;
- a=49;
- b=49;
- c=49;
- if(a==b)
- {
- printf("a和b在内存中的值一致/n");
- }
- if(a==c)
- {
- printf("a和c在内存中的值一致/n");
- }
- if(b==c)
- {
- printf("b和c在内存中的值一致/n");
- }
- printf("a = %x /r/n",a);
- printf("b = %x /r/n",b);
- printf("c = %f /r/n",c);
输出结果如下:
a和b在内存中的值一致
a和c在内存中的值一致
b和c在内存中的值一致
a = 31
b = 31
c = 49.000000
请按任意键继续. . .