一、数据类型
C语言中有4种基本数据类型---整型、浮点型、指针和聚合类型(如数组和结构等)。其他的都是从这几种基本类型的某种组合派生而来的。
1、整型:字符、短整型、整型和长整形,他们分为有符号和无符号两种。
规则:长整型至少应该和整型一样长,而整型至少应该和短整型一样长。
^枚举类型^是一种构造数据结构,当一个变量有几种可能的取值时,需要用枚举类型类型来定义。
基础类型必须能够表示该枚举中定义的所有枚举数值。枚举声明可以显式地声明 byte、sbyte、short、ushort、int、uint、long 或 ulong 类型作为对应的基础类型。没有显式地声明基础类型的枚举声明意味着所对应的基础类型是 int。
Mon、Tues、Wed 这些名字都被替换成了对应的数字。这意味着,Mon、Tues、Wed 等都不是变量,它们不占用数据区(常量区、全局数据区、栈区和堆区)的内存,而是直接被编译到命令里面,放到代码区,所以不能用&取得它们的地址。这就是枚举的本质。
枚举类型变量需要存放的是一个整数,它的长度和 int 相同,都为4.
(补)c的默认类型转换
类型级别 从高到低是 的顺序是 long double, double, float, unsigned long long,
long long, long, unsigned int 和 和 int.
1、算术运算式中 , 低类型能够转换为高类型。
2、赋值表达式中 , 右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。
3、函数调用中参数传递时 ,系统隐式地将 实参转换为形参的类型后,赋给形参。
4、函数有返回值时 ,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。
二、浮点类型
字面值总写成十进制的形式,必须有一个小数点或是一个指数,也可两者都有。例如:
浮点数字面值在缺省情况下都是double类型的,除非后面跟一个L或l表示它是一个loong double类型的值,或者跟一个F或f表示它是一个float类型的值。
三、关键字(32个)
1、非常见:auto、register、volatile、goto
2、存储相关:const、extern、register、volatile、static、auto、signed、unsigned
3、数据类型:char、short、int、float、long、double、struct、union、enum、void
4、逻辑控制:if、else、for、while、do、break、continue、return、default、switch、case、goto
5、特殊用途:sizeof、typedef
auto这个关键字出来意味着当前变量的作用域为当前函数或当前代码块中的局部变量,意味着当前变量会在内存栈上进行操作。
static的意义如下: static修饰的局部变量存储在程序的静态区。 static存在的另一个意义是文件作用域标示符。
register关键字定义变量时例如register inta;表达的意思是将变量a放在寄存器中,这样对该变量进行操作时速度会如闪电般快。被register修饰的变量称为寄存器变量,该变量的访问速度会达到最快。
extern关键字它不是一个定义,而是一个声明,他表示这个变量或者函数的定义在别的文件中。从前面的例子我们可以看到。在c语言中,函数被默认定义为extern。
const关键词
int const *p; 指向整型常量的指针。可以修改指针的值,不可以修改指针指向的值。
int * const p;指向整型的常量指针。可以修改指针指向的值,不可以修改指针的值。
Int const * const p;无论是指针本身还是指向的值都不可以改变。
四、语句
switch 怎么实现的?什么时候用 switch 比 if else 高效?(汇编实现上)
if 和switch这两种判断方法都有自己的优势,其效率高低之在于与编译器对其优化程度。switch效率一定是高于if的,高也高不了多少,如果你编程仅仅是windows的话,就无所谓了if还是switch了。
五、运算符
<< >>
<< (左移):
>> (右移):操作数是正数时,右移后填0;负数时,右移后填1
左移:x<<5 ==x*2的5次方
有符号右移:与左移相反:x>>5==x/(2的5次方)-------- 在数轴上向小的数靠近 (-10 >> 2 ---> -3 10 >> 2 ---> 2)
操作符优先级