内存:
程序在执行时,程序的指令和数据都必须存储到主内存中,也可以说存在RAM(随机访问存储器)中,RAM是易失性存储器,PC关闭,RAM内容丢失;
变量是什么?
变量就是计算机的一块特定的内存,有一个或多个连续的字节组成,当然每个变量都会有一个名字叫变量名,就像一个ID,一个身份证号码,这个变量名独一无二的代表着这块 内存空间,编译器就可以通过这个ID来直接调用这块内存里存储的数据了,这也很好的解释了变量名不占内存空间,编译器直接就把他翻译成了数据;
变量的声明其实也可以称为变量的定义,按照声明得到一个引用(变量名),定义分配内存空间来看,变量在声明时就分配了内存空间,所以变量的声明也可以看做是定义;
变量是内存,那么这个内存多大呢?就要看声明的数据类型了。
整型:
整型有有符号整型与无符号整型之分,它们所占的字节数是相同的,但是无符号的整型比其对应的有符号整型的数字大一倍,这其实很好验证,可以用<limits.h>头文件(一会 再说)。
有这么多的整型类型,怎么知道一个数是什么类型,比如 100 ,它可以是 unsigned int 、int 等等。一个整型数值编译器默认是int,如果你想100是long型,就写成 100L,其他的同理。其实感觉这个没什么用。
最让我惊奇的是,竟然有long long int ,占8个字节,还有以前似乎short类型的输入与输出都是直接%d,其实准确的是%hd。
浮点型:
浮点数在计算机中是怎样表示的,这个忘了,也不想再看了,等需要时再说吧。
刚开始学C语言老师就说没有long double类型,但是今天我发现其实有,这取决于编译器,vc6.0没有,但是CodeBlocks有这个类型,它占12个字节。
一直郁闷二级考试中,为什么sizeof('a'+10.0)输出的是8,今天知道了,原来一个带小数点的数默认下编译器直接当做double型,除非你这样写100.0f。
浮点数输出时要控制一下格式,什么%8.2f什么的就不写,关键今天知道了,编译器原来默认情况是右对齐,你可以写成%-8.2f,就变成了左对齐,就是下面图片的区别
上边是左对齐,下边是右对齐。
布尔型:
众所周知,C语言中没有布尔类型,但是今天我发现有布尔类型,而且只占一个字节,当不包含<stdbool.h>头文件时,如下声明:
_Bool 变量名;
当包含<stdbool.h>头文件时,可以这样声明
bool 变量名 = true;
这个头文件中定义了true和false两个常量,分别是1和0。这些是C语言中最新引入的,不过我在CodeBlocks上验证过了,这是可以的。
字符类型和枚举类型的就不写了,感觉掌握的还可以。
类型之间的转换:
强制类型转换没什么,可能暴力的总是崇尚简单美吧。
自动类型转换时,编译器会自动把一个值域较小的操作数转换为另一个操作数的类型,这就是隐式类型转换,这里有7条详细的规则,但是基本上掌握了上面的那个规则就 可以解决大多数问题了。
<limits.h>
从名字就可以看出这是封装了一些极限值的头文件。
类型 下限 上限 char CHAR_MIN CHAR_MAX short SHORT_MIN SHORT_MAX int INT_MIN INT_MAX long LONG_MIN LONG_MAX long long LLONG_MIN LLONG_MAX
无符号类型的下限都是0,上限同理命名,就是在前面多加了一个U,比如:UINT_MAX
<float.h>
在这个头文件中封装了浮点型的一些极值和其他东西,有些东西难度系数很高,以后再来了解。
类型 下限 上限 float FLT_MIN FLT_MAX double DBL_MIN DBL_MAX long double LDBL_MIN LDBL_MAX
命名好奇怪吧,其实就是省略的所有的元音字母的命名规则吧。
sizeof:
在C语言中sizeof是一个关键字,并不是函数名,它可以用来确定给定的类型所占的字节数,得到一个size_t类型的整数(unsigned int),size_t包含在<stddef.h>头文件中。
sizeof还有其他重要用途。
又是愉快的一天啊、、、、、