1.基本的数据类型:
数据类型有基本数据类型(空类型,字符型,数值型)和复合数据类型(数组,结构,联合,枚举,指针)。
实型数据,有单精度实型和双精度实型。
整形有短整型(有符号及无符号),整形(有符号及无符号),长整形(有符号及无符号)。
char 字符型
unsigned char 无符号字符型 取值范围0-255
signed char 有符号字符型 -2的7次~2的7次-1
int 整形 -2的31次~2的31次-1
unsigned int 无符号整形 0~2的16次-1
signed int 有符号整形 -2的31次~2的31次-1
float 浮点型 10的-38次~10的38次
double 双精度型 10的-308~10的308次
思考:字符是有符号整数还是无符号整数??
例如:int main()
{
char a[1000];
int i;
for(i=0;i<1000;i++)
{
a[i] = -1-i;
}
printf("%d\n",strlen(a));
return 0;
}
结果输出255.
int i=-20;
unsigned int j=10;
i+j=?
结果是-10.
2.声明与定义:
int i;//定义一个全局变量
extern int i;//声明一个全局变量
int i=0;//定义一个全局变量并且赋予初值
extern int i=0;//定义一个全局变量并且赋予初值
定义:创建一个变量,为其分配内存空间,一个变量只能定义一次;
声明:告知编译器,这个名字的变量已经对应一块内存,但并未分配内存空间
3.关键字:
register:请求编译器尽可能将变量存在CPU内部寄存器中
注意:修饰的变量的类型必须是CPU能够接受的,用register声明的变量可能不是在内存中进行存储,所以不能用&符号进行取地址操作。
static关键字和const关键字。(略)
使用const关键字的好处??给阅读代码的人传达非常有用的信息,可以防止意外修改一些只读数据,const对编译器优化也是一个重要提示,编译器也许会把const变量优化。
volatile关键字的作用:
(1)告诉编译器volatile变量在两个操作之间不会被缓存在寄存器中。
(2)不做常量合并,常量传播等优化。
(3)对volatile变量的读写不会被优化掉。
使用场合:(1)中断服务程序中修改的可供其他程序检测的变量需要加
(2)多任务环境下共享的标志要加
(3)存储器映射的硬件寄存器通常也要加说明,因为每次对他的读写可能有不同意义。
extern关键字:表明变量或函数在外部文件定义,注意C++中的extern C。
4.联合体union:
当多个基本数据类型或复合数据结构要占用同一片内存时,使用联合体。
用联合体可以判断当前系统的大小端序。所谓的大端序,即数据的高位存放在 低地址单元。小端序是指数据的低位存放在低地址单元内。
5。枚举类型--enum;
enum sun{a,b,c};//定义一个枚举类型变量叫sun,枚举元素为a,b,c,又叫枚举常量。
可以在声明的时候进行赋值操作,若不进行元素赋值,则系统从0开始自动递增的进行赋值,若只顶以了第一个元素,则系统依次进行+1操作。
6.typedef关键字:
为一种数据类型定义一个新名字。
7.宏#define(定义常量与命令)
举些例子,#define MAX(a,b) ((a)>(b)?(a):(b))
函数式使用宏定义可以提高代码的执行效率,类似C++下的内联函数。
8.while,for语句:
C++/C循环中,for语句使用频率最高,while其次。提高循环体执行效率的基本办法是降低循环体的复杂性。
在多重循环中,应将最长的循环放在最内层,最短的循环放在最外层,减少CPU跨且循环层次数。
9.swaitch语句的使用注意:
(1)每个case语句需要加break
(2)最后要加default分支。
10.goto语句的使用隐患:goto语句可以实现灵活跳转,但是如果不加限制,则会破坏结构化的程序设计风格。