总论:
变量和常量是程序处理的两种基本的数据对象。
声明语句说明变量的名字和类型,也可以指定变量的初值。
运算符指定将要进行的操作。
表达式则把变量与常量组合起来生成新的值。
对象的类型决定该对象可取值的集合以及可以对该对象执行的操作。
基本数据类型
C语言提供了下面4种基本数据类型:
char //字符型,占用一个字节
int //整型,通常反映了所用机器中整数的自然长度
float //单精度浮点型
double //双精度浮点型
数据类型限定符:
1、short 和 long 两个限定符用于限定整型;关键字 int 可以省略,通常也习惯于这么做。
short sh; // short int sh;
long counts; // long int counts;
2、类型限定符 signed 与 unsigned 只能用于限定 char 类型和任何整型。
3、long 限定符可以用于双精度浮点型,long double 类型表示高精度浮点数。
字符常量
一个字符常量是一个整数,书写时将一个字符括在单引号中(如‘0’)。
字符在机器字符集中的数值就是字符常量的值,如‘0’在机器字符集中的数值是48,它与数字0没关系; 再如'A'在机器字符集中的数值是65。
注:
字符常量一般用来与其他字符进行比较,但也可以像其他整数一样参与数值运算。
字符常量‘\0’表示值为0的字符,也就是空字符(null)。
我们通常用‘\0’的形式来代替0,以强调某些表达式的字符属性,但其数字值为0。
字符串常量
字符串常量也叫字符串字面值,是用双引号括起来的 0 个或多个字符组成的字符序列。
字符串常量就是字符数组,字符串的内部表示使用一个空字符‘\0’作为字符串的结尾。
存储字符串的物理存储单元数比括在双引号中的字符数多一个。
注:
C语言对字符串长度没有限制,程序扫描到‘\0’结束符表示字符串完。
字符串常量存储静态存储区。
标准库函数strlen(char *str)返回字符串 str 的长度( 即空值结束符之前字符数目)。
下面设计strlen函数的一个版本:
int strlen(const char s[])
{
int i = 0;
while (s[i] != '\0')
{
++i;
}
return i;
}
枚举常量
枚举是一个常量整型值的列表。
// 预留业务类型
enum RTBPUB_RESVYPE
{
RESVYPE_IB = 0, //综合帐务
RESVYPE_OCE = 1, //在线计费
RESVYPE_HB = 2, //离线计费
RESVYPE_OCECHARGE = 5 //在线计费充值
};
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号“ ,”隔开。
(2) RTBPUB_RESVYPE是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。
(3) 如果不给枚举赋值,那么第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。
(4) 可以设定枚举成员的值,从而自定义某个范围内的整数。
(5) 枚举型是预处理指令#define的替代。
变量常量表达式
常量表达式是仅仅只包含常量的表达式,这种表达式在编译时求值,而不是在运行时求值。
#define MAXLINE 1000
char g_szline[MAXLINE + 1];
变量声明
变量都 必须先声明后使用,一个声明指定一种变量类型。
可以在声明同时对变量进行初始化,在声明中,如果变量名的后面紧跟一个等号以及一个表达式,该表达式就充当对变量进行初始化的初始化表达式。
int i = 0;
int ilen = MAX + 100;
注:
声明语句说明变量的名字和类型,也可以指定变量的初值(初始化)。
任何变量的声明都可以使用 const 限定符限定,该限定符指定变量的值不能被修改。
对数组而言,const 限定符指定数组所有元素值都不能被修改。
const int PI = 3.14;
const char msg[] = "00000";
int strlen ( const char s[]);
变量初始化
函数内部定义的变量,应该在定义的时候进行初始化,否则它的值是不确定的,为被创建前相应的内存单元保存的值。
int a = 1; // 传统的C初始化
int b(2); // C++的新方式
int c = {3} 或 int c{3} // C++的大括号初始化器用于任何类型(大括号内不包含任何东西时,变量的初始化为0)
类型转换
一般来说,自动转换是指把“比较窄的”操作数转换为“比较宽的”操作数,并且不丢失信息的转换。
/* atoi函数:将字符串S转换为相应的整型数*/
int atoi(const char s[])
{
int i;
int n = 0;
for(i=0; s[i]>='0' && s[i]<='9'; i++)
{
n = 10 * n + (s[i] - '0');
}
return n;
}
(类型名)表达式;