数据类型
基本数据类型:
具体大小可能会有不同,由sizeof函数确定。32位 | 64位 | ||
char | 字符型 | 1byte | 1byte |
short | 短整型 | 2byte | 2byte |
int | 整型 | 4byte | 4byte |
long | 长整型 | 4byte | 8byte |
float | 单精度浮点型 | 4byte | 4byte |
double | 双精度浮点型 | 8byte | 8byte |
ps:
1byte(字节) = 8bit(位)
位:计算机中最小的数据单位,0或者1。
字节:储存空间的基本计量单位,一个ASCII码就是一个字节。
类型限定符unsigned(无符号)和signed(有符号)可用于限定char类型或任何整形。
unsigned类型的数总是正值或0,signed类型从负值到正值。
如:unsigned char的取值范围为0~255,signed char的取值范围为-128~127。
整型默认有符号。
char类型是否带符号取决于具体机器,但是打印字符总是正值。
ANSI C标准规定:各种类型的取值范围必须在头文件<limits.h>中定义,在不同的硬件上会有不同的长度。
利用标准头文件来确定各类型有符号和无符号的取值范围:
#include <stdio.h> #include <limits.h> main(){ printf("signed char %d~%d\n", SCHAR_MIN, SCHAR_MAX); printf("signed short %d~%d\n", SHRT_MIN, SHRT_MAX); printf("signed int %d~%d\n", INT_MIN, INT_MAX); printf("signed long %d~%d\n", LONG_MIN, LONG_MAX); printf("unsigned char 0~%u\n", UCHAR_MAX); printf("unsigned short 0~%u\n", USHRT_MAX); printf("unsigned int 0~%u\n", UINT_MAX); printf("unsigned long 0~%lu\n", ULONG_MAX); return 0; }
结果
signed char -128~127
signed short -32768~32767
signed int -2147483648~2147483647
signed long 0~-1
unsigned char 0~255
unsigned short 0~65535
unsigned int 0~4294967295
unsigned long 0~18446744073709551615
八进制和十六进制
八进制以0为前缀。
十六进制以0x或0X为前缀。
其他类型:
数组,结构,联合,指针,函数
变量
变量实际上是程序可操作的储存区的名称,
每个变量都有特定的类型,类型决定了变量存储的大小和布局。
变量必须先声明后使用。(可以在声明的同时对变量进行初始化)
声明用于说明变量的属性,它由一个类型名和一个变量表组成。
变量表由1个及以上个变量名组成,彼此用,(逗号)分隔。
变量名是由字母,数字及下划线组成的序列。并必须以字母开头。
关键字不可做变量名。如:if,else,int,float等。
ps:
局部变量一般使用较短的变量名(尤其是循环控制变量),外部变量使用较长的名字。
常量
常量是固定值,在程序执行期间不会改变。在编译时就将值进行相应替换,值已经确定。
#define(宏定义)
用#define可以将符号常量(常量名)定义为一个特定的字符串。
#define 常量名 替换文本
在该定义之后,程序中出现的所有在#define中定义的常量名(既没有用引号引起,也不是其他名字的一部分)都将用相应的替换文本替换。
常量名与普通变量名形式相同:以字母开头的字母,数字,下划线序列,通常用大写字母拼写,与变量名相区分。
替换文本可以是任何字符序列。
类型:
后缀仅起标识作用。本质是字符序列的替换。
int型常量 | 纯数字序列 |
long型常量 | 以l或L结尾的数字序列 |
unsigned型常量 | 以u或U结尾的数字序列 |
ps:如果一个整数太大以至于无法用int类型表示,也被当作long类型处理。
double型常量 | 包含一个小数点,或一个指数(e)的数字序列 |
float | 包含一个小数点,或一个指数(e),并以f或F结尾的数字序列 |
字符常量:
将一个字符括在单引号中。
字符串常量:
将一组字符序列括在双引号中。
const声明
任何变量的声明都可以用const限定符限定。
const限定符指定变量的值不能被修改。若修改,编译器会报错。是一种显式的提醒。
相当于将变量通过const限定为常量。
并且,除基本数据类型外,还可以限定数组,指针等数据类型。保证被限定的数据类型的值不会被修改。
enum(枚举)
enum定义了一个新的类型,类型的取值是{ }内列举的整型常量值的一个,枚举值之间用,(逗号)分隔开。
声明枚举类型:
enum month { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC};
对枚举型变量赋值:
enum month nowmonth = MAR;
没有显式说明的情况下,第一个枚举名的值为0,之后的枚举名递增+1。
若指定了枚举名的值,则之后的未指定值的枚举名的值递增+1。
#include <stdio.h> main(){ enum months { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC }; enum months nowmonth = MAR; printf("%d\n",nowmonth); return 0; }
同一程序中不能出现同名的枚举类型和枚举成员。
同一枚举中不同的名字可以具有相同的值。