1.基本数据类型
char 字符型 ASCLL字符代码
unsigned char 无字符类型 0到255
signed char 有字符类型 -2七次方~2的七次方-1
int 整型 -2的三十一次方~2的三十一次方-1
unsigned int 无符号整形 0~2的三十一次方-1
float 浮点型 10的-38次方到10的38次方
double 双精度型 10的-308次方~10的308次方
通常用typedef来重新指定声明无符号还是有符号
Typedef int sig_int;
Typedef unsigned int un_int;
格式字符
d 十进制整数
x 十六进制无符号整数
o 八进制无符号整数
u 不带符号十进制整数
c 单一字符
s 字符串
e/E 指数形式浮点小数
f 小数形式浮点小数
声明与定义
定义:创建一个变量,为其分配内存空间,并为它取名字(变量名),一个变量只能定义一次;
声明:告知编译器,这个名字(变量名)已经匹配在一块内存上了,但是并未为其分配内存;
变量的存储类型
静态存储区:用于存放程序中的静态数据,如全局变量等
态存储区:用于存放程序中的动态数据,如函数形参、局部变量、函数调用时的现场保护和返回地址等
静态数据说明时在静态存储区中分配存储单元并在程序执行过程中始终占用该单元,直到程序结束才释放;全局变量、局部静态变量
动态数据在函数开始执行时分配动态存储空间,函数结束时释放这些空间。形参变量、局部动态变量(auto register)、函数调用现场保护和返回地址等
C的存储类型有四种: auto static register 和 extern 。
register:请求编译器尽可能地将变量存在CPU内部寄存器中;
register修饰变量的类型必须是CPU所接受的;
register变量可能不是在内存中存储,所以不能使用&来获取变量的地址
static :
全局静态变量:作用范围局限于它的源文件,即只有本文件内的代码才可以访问它,变量名在其他文件内不可见
局部静态变量:局限于特定函数,但出作用域并不释放,在函数体内的静态变量的值也能够维持
静态函数:作用范围仅限于它的源文件,即只有本文件内才能够调用,函数名在其他文件不可见
存放位置:程序开始时,存放在全局数据区,结束时释放空间,默认初始化值是0,使用时可改变其值;
const:
const int* a; int const *a;
是一个指向const int型的指针,a所指向的内存单元不可改写,所以(a)++是不允许的,但a可以改写,所以a++是允许的。
int const a;
a是一个指向int型的const指针,a是可以改写的,但a不允许改写。
int const * const a;
a是一个指向const int型的const指针,因此a和a都不允许改写
extern :表明变量或函数的定义在别的文件中,下面用到的这些变量或是函数是外来的,不是本文件定义的,提示编译器遇到此变量或函数时,在其他模块中寻找定义;
如果一个函数只能被本文件中其它函数所调用,称为内部函数(或静态函数)。定义时在函数类型前加static。
struct:多种数据组合起来的一个整体,其表现形式是一个结构体
结构体类型定义描述结构的组织形式,不分配内存
不能将一个结构体变量作为一个整体进体输入输出
union :当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;
当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n 选1”),我们也可以使用联合体来发挥其长处
所谓“共用体(union)”是指使几个不同的变量共占同一段内存的数据类型
union node
{ char ch[7];
int num;
}; 共占8字节
Big_endian 大端字节序: 数据的高字节位存储在低地址对应的存储单元;
Little_endian 小端字节序:数据的低字节位存放在低地址对应的存储单元
enum 枚举型:
enum kids{nippy, slats, skippy, nina ,liz};
enum levels {low=100,medium=500,high=2000};
typedef:作用是为一种数据类型定义一个新名字
格式: typedef 数据类型 自定义数据类型
typedef unsigned long uint32;