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 其实是整型值,因为枚举类型中所定义的那些常量,本质就是整型值
枚举类型中,定义的这些常量,其本质是整型值,而使用枚举类型所定义的变量,其本质是整型变量