从C出发 34--- 自定义数据类型(下)

 

 


 

 struct STest 所对应的内存字节数为8,为什么为8?

因为struct STest 里面的a 和 f 占用不同的内存,分别占用4个内存,加在一起就是8

 

ut 里面 a 成员的起始地址和 ut里面 f 成员的起始地址是一样的 

 st 里面的成员地址不同,并且a 和 f 相差了4 个字节,意味着在 st 里面的 a 和 f 对应的内存是不同的


 为什么 ut.f 打印的是  0.001697 为什么?

因为 a 和 f 的类型不同,一个是整型一个是浮点型,而整型数据和浮点数据在内存中的表示方式是不一样的,所以同一段内存,同是 4 个字节,按照整型的方式去解释这4个字节中的数据时,得到的是一个结果,按照浮点型的方式去解释这4个字节中的数据时,得到的是另外一个结果

 f 所对应的值并不是我们在代码里面所赋的值?

为什么?

浮点数自身的原因造成的,浮点数在内存中的表示方式是不精确的

想要使用浮点型的变量来精确的保存987654321.0 是几乎不可能的,是肯定会存在误差的,


 

 


定义真正意义的常量,这样写

enum {constant =  128 }

 花括号之间定义的是  : 整型常量

 

 

#include <stdio.h>
#include <string.h>

enum Day {MON = 1,TUE, WED, THU, FRI, SAT, SUN};  //使用enum 来创建类型,新的类型名为Day,这是一个什么类型?枚举类型(常量的集合),因此我们这里定义的都是常量
enum Season {Spring, Summer = 3, Autumn, Winter = -1};

enum { CONSTANT = 12345 };
//定义无名枚举类型,那定义这样的无名枚举类型有什么意义呐? 
//仅仅为了定义整型常量

int main()
{
    enum Day d = TUE;        //利用新类型来创建变量
    enum Season s = Winter;

    
    //使用上面所定义的常量,来给这里的整型变量做初始化,正确吗?
    
   int  i = SUM;
   int  j = Autumn;

   printf("d = %d\n",d);        //  2
   printf("s = %d\n",s);        //  -1
   printf("i = %d\n",i);        //  7
   printf("j = %d\n",j);        //  4


   /************正确吗?**************/
    d =  0;
    s = -2;
   printf("d = %d\n",d);        //  7
   printf("s = %d\n",s);        //  4
    
    //正确 
    //说明什么?
    //枚举类型的变量其本质还是整型变量,

    /*********************************/

    
   printf("sizeof(enum Day) = %d\n",sizeof(enum Day));        //  4
   printf("sizeof(enum Season) = %d\n",sizeof(enum Season));  //  4  意味着enum 枚举类型的本质就是整型,所以用 enum 类型创建的变量其本质就是整型变量

   printf("CONSTANT = %d\n" ,CONSTANT);     //12345

   CONSTANT = 54321;   //编译不过?    因为这个 CONSTANT 是常量,想要对常量赋值,是错误的

    return 0;
}

 编译通过意味着 12 行和 13 行都是正确的,意味着什么?

意味着 SUN 其实是整型值,因为枚举类型中所定义的那些常量,本质就是整型值

 

 枚举类型中,定义的这些常量,其本质是整型值,而使用枚举类型所定义的变量,其本质是整型变量

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长生君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值