C/C++变量在内存中的存储

在C++语言中,有如下代码:

  1.     char a;
  2.     int b;
  3.     int c;
  4.     a='1';
  5.     b=1;
  6.     printf("a = %x /r/n",a);
  7.     printf("b = %x/r/n",b);
  8.     c=a;
  9.     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的长度因此赋值不会产生数据的丢失。

 

看如下代码:

  1.          char a;
  2.     int b;
  3.     
  4.     a=49;
  5.     b=49;
  6.     printf("a = %x /r/n",a);
  7.     printf("b = %x /r/n",b);

输出结果是:

a = 31
b = 31
请按任意键继续. . .

 

这里 a =49;  49 c++编译器默认为10进制,49的16进制表示为 0x31 那么在a所在的内存中存放的依然是0x 31。

同理b在内存中存放的也是0x31。

 

看下面的代码:

  1.  char a;
  2.  int b;
  3.     
  4.     a=49;
  5.     b=49;
  6.     printf("a = %x /r/n",a);
  7.     printf("b = %c /r/n",b);

 

输出的内容是:

 

 a = 31
 b = 1
请按任意键继续. . .

这里b输出的是1,因为b是按照字符型来输出的。

 

通过以上3个例子要说明的是,要看淡变量类型,不要被过多的变量类型搞的晕头转向,看问题要看本质。不同的变量类型反映在内存中,其实只是开辟的内存大小有区别甚至内存大小都一样,关键还是要看内存空间存储的二进制码是什么。两个变量只要是在内存中存储的二进制码一样 无论这两个变量是什么类型,我们都可以认为他们是相等的。

看如下代码:

  1. char a;
  2.     int b;
  3.     float c;
  4.     a=49;
  5.     b=49;
  6.     c=49;
  7.    
  8.     
  9.     if(a==b)
  10.     {
  11.         printf("a和b在内存中的值一致/n");
  12.     }
  13.     if(a==c)
  14.     {
  15.        printf("a和c在内存中的值一致/n");
  16.     }
  17.     if(b==c)
  18.     {
  19.         printf("b和c在内存中的值一致/n");
  20.     }
  21.     printf("a = %x /r/n",a);
  22.     printf("b = %x /r/n",b);
  23.     printf("c = %f /r/n",c);

输出结果如下:

a和b在内存中的值一致
a和c在内存中的值一致
b和c在内存中的值一致
a = 31
b = 31
c = 49.000000

请按任意键继续. . .

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值