黑马程序员——数据类型、常量、变量
一、数据类型
在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。
二、常量
1.概念
在程序执行过程中,其值不发生改变的量称为常量。
2.分类
1)整型常量:即(int)整数,如2,4,56等等。
2)浮点型常量:浮点型常量分为double和float两种数据类型。
-
- double:双精度浮点型,比如3.14、-5.9,0.0等。
- float:单精度浮点型,比double所能表示的小数位少。float型数据是以f结尾的,比如3.14f、-5.9f、0.0f。
3)字符型常量:将(0~9)一个数字、英文字母(a~z、A~Z)或者 其他符号(+、-、!、?等)用单引号括起来,比如'6'、'a'、'F'、'+'、'$'等,需要注意的是一个中文字是不能用单引号括起来的。
4)字符串常量:将一个或者多个字符用双引号("")括起来,比如"6"、"男"、"哇哈哈"、"abcd"、"my_car4"。
三、变量
1.概念
其值可以改变的量称为变量。每个变量都有名字,在内存中占据一定的存储单元。变量定义必须放在变量使用之前,一般放在函数体的开头部分。
2.变量定义形式
类型说明符 变量名, 变量名, ...;
3.变量的命名规范
1)严格遵守标识符的命名规范
2)变量名不能同名
4.变量的赋值
赋值形式:类型说明符 变量1= 值1, 变量2= 值2, ……;
int a=3; int b,c=5; float x=3.2,y=3.0,z=0.75; char ch1='K',ch2='P';
需要注意的是在定义中不允许连续赋值,如a=b=c=1是错误的。
5.变量的初始化
没有初始化,如int a。这样情况下,a值的可能性:1)系统的数据;2)上一个程序的数据;3)垃圾数。初始化的方法就是给变量赋值。
初始化的方法:
1)定义的同时初始化
int a=0,b=0;
2)先定义后初始化
int e,f;
e=0;
f=0;
3)使用一个变量初始化另外一个变量
int g=h;
4)给变量连续初始化
int i,j,k;
i=j=k=1;
6.变量的作用域
声明变量的类型不同,其作用域也不同。变量按作用域的范围氛围:局部变量和全局变量。
1)局部变量:函数内部或代码块的内部定义的变量。
{代码块语句1}{代码块语句2}
需要注意:代码可以嵌套;在代码快内部可以定义和代码块外部同名的变量;一个代码块结束,其内部的变量所占的内存空间被释放,在代码块外部无法访问内部的变量。
作用域:从定义开始,到它所在的代码块或函数体“}”为止。
2)全局变量:在函数的外部定义的变量。
作用域:从定义开始到文件的末尾,在不同的函数体中都可以使用。
四、数据类型的转换
数据类型的转换分为:自动转换和强制转换。
1、自动转换
在不同数据类型的量混合运算时,自动转换由编译系统自动完成。自动转换规则:
1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。
3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
4)char型和short型参与运算时,必须先转换成int型。
5)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。
转换规则:
#include<stdio.h> int main(){ float PI=3.14159; int s,r=5; s=r*r*PI; printf("s=%d\n",s); return 0; }
本例程序中,PI为实型;s,r为整型。在执行s=r*r*PI语句时,r和PI都转换成double型计算,结果也为double型。但由于s为整型,故赋值结果仍为整型,舍去了小数部分。
2.强制转换
强制类型转换是通过类型转换运算来实现的。其一般形式为:
(类型说明符) (表达式)
(float) a; /* 把a转换为实型 */ (int)(x+y); /* 把x+y的结果转换为整型 */
注意:无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。