——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、数据类型分类
1.数据类型分类
C语言数据类型分为基本数据类型(整形int、字符型char、浮点型float 和double)、构造类型(数组/结构体struct/共用型union/枚举enum)、指针类型/空型(void)及定义类型(typedef)构成。
2.常量
1)常量表示固定的数据。
2)分类
a 整型常量(int)
其实就是int类型的数据,包括了所有的整数。它也分为二进制/八进制/十进制和十六进制类型。后期有二进制、十进制、十六进制之间的转换。
b 浮点型常量(float\double)
浮点型常量分为double和float两种数据类型;
double:双精度浮点型,其实就是小数,比如5.43、-2.3、0.0等;
float:单精度浮点型,比double的精确程度低,float型数据都是以f结尾的,比如5.43f、-2.3f、0.0f。
c 字符常量(char)
将一个数字(0~9)、英文字母(a~z、A~Z)或者 其他符号(+、-、!、?等)用单引号括起来。比如’6’、’a’、’F’、’+’、’$’等。
d 字符串常量
将一个或者多个字符用双引号(“”)括起来,例如“中国”,“123”,“abcd”;
3.变量
1)当一个数据的值需要经常改变或者不确定时,就应该用变量来表示。
2)任何变量在使用之前,必须先进行定义。定义的格式是: 变量类型 变量名。定义变量的目的是:在内存中分配一块存储空间给变量,方便以后存储数据。一旦给变量指明了类型,那么这个变量就只能存储这种类型的数据。
3)定义
如果是同一种类型的变量有多个,可以连续定义,变量名之间用逗号,隔开。例如 int a, b, c……
4)初始化
a 先定义,再初始化
定义好的变量进行第一次赋值,也叫做“初始化”。
变量赋值的格式是:变量名 = 值,例如 a = 4;
“=”是一个赋值运算符,作用是将右边的值赋值给左边的变量。
b 定义同时初进行始化
在定义变量的同时进行初始化:
变量类型 变量名 = 值, 例如:int a = 4;
5)变量的使用注意
变量的作用范围(作用域)是从定义变量的那一行代码开始,直到所在的代码块或者函数体结束。
int main()
{
int a = 10;
{
int a = 9;
int b = 20;
printf("a=%d",a);
}
return 0;
}
在第3行和第5行分别定义了变量a,那么第三行的变量a的作用域是:第三行到结束‘}’。而第5行的作用域是:第5行到第7行的‘}’结束。
那么此时输出的结果a = 9,因为在内层的函数体中,a的作用程度
已经覆盖了第三行的a的程度。
在代码块的内部可以定义和代码块外部一样的变量。
为变量分配存储空间时,先定义到变量占用高位的地址,后定义的变量占低位的。
二、不同类型变量在内存中占的存储空间
1、存储容量单位:
字节:Byte
1 Byte= 8 bits
“字”由若干个字节构成,字的位数叫做字长,字长就是说字所对应的二进制数的长度。
不同的机器有不同的字长。例如一台8位机,它的1个字就等于1个字 节,字长为8位。同理:一台16位机,那么,它的1个字就由2个字节构成,字长为16位;而一台32位机,它的1个字就等于4个字节,字长为32位。MAC的OX系统就是64位制下的。
每一个存储空间都有对应的“址”,不同类型的变量占有不同的内存空间。以下会详细解释。
2、不同类型变量在内存中的存储
前面讲了为什么变量在初始化之前为什么要先定义,因为只有定义了数据的类型才知道我们想要计算机为这个变量安排多少的空间存储。下图是不同的基本数据类型变量在不同编译器下存储的空间。
例如:
int main()
{
int a = 4;
char b ='A';
...
}
在给变量分配存储空间时,根据定义变量的先后顺序以及定义变量的类型来决定。先定义的整形变量a分配大的空间地址,占用4个字节(32位)用来存储二进制形式的4,后定义的字符变量b分配小的空间地址,占用1个字节(8位)存储二进制形似的字符’A’。
再例如下图所示:
{
int a = 10;
int b=3;
}
从图中可以看出,变量a占用了地址“0xff10~0xff07”4个字节空间存储二进制形式的10,其中每个字节都有自己的地址,而其中每个变量存储单元的第一个字节的地址(标注黄色部分)也是变量a的地址。这在以后的指针中会用的到。
那么如何查看变量的内存地址呢?
int main(){
int a = 4;
printf("a的地址是%p\n",&a);
return 0;
}
在这里,%p就是用来输出变量地址。
输出格式符
%d %ld | 以十进制形式进行输出 int 型 /long int型
%u |用来输入无符号的十进制
%c |用来输出单个字符
%p |用来输出变量所在的地址
%s |用来输出字符串
%f |用来输出实数,以小数形式输出
%o |用来输出8进制
%x |用来输出16进制