第一章:关键字
1.1、register
@@register 变量可能不存放与内存中,因此,不能使用“&”来对访问变量的地址。
1.2、static
@@静态全局变量:作用域仅限于所定义的文件中,其他文件使用extern关键字也无法访问;
@@静态局部变量:函数体内定义的static变量,储存于静态存储区,只能在此函数体中进行使用,其他函数不能访问(函数声明static变量后,该函数将不可重入。)
@@静态函数:此函数外部文件不能进行访问,可起到保护作用。
1.3、基本数据类型:
@@long 和int的区别:
《C和指针》中写过:long与int:标准只规定long不小于int的长度,int不小于short的长度。(我记的好像是这样)
16位系统:long是4字节,int是2字节
32位系统:long是4字节,int是4字节
64位系统:long是8字节,int是4字节
@@局部变量中采用通用的命名方式,仅限于n、j、i等作为循环变量使用;
@@定义变量的同时一定要进行初始化;
1.4 sizeof
@@sizeof 并非是一个函数,是一个关键字
int k;
sizeof(int) //括号必须
sizeof k;//括号非必须
1.5 if else
@@ bool 变量判断
使用if(bTag),if(!bTag)进行bool变量判断
@@float变量判断
float变量是带有精度的小数,因此要引入精度进行条件判断
if(fNum>=epsinon)...
@@指针非空判断
if(NULL==p)
@@attention:
if条件判断,先进行正常情况判断,再进行异常情况判断(正常情况发生的概率更大,避免无谓的低效判断)。
1.6 switch
@@case后的值的要求???
@@attention:、
case语句尽量简短,如果条件执行的太长,要单独写一个函数进行功能模块化。
@@continue ,break
continue终止“本轮”循环,break终止“本层”循环
eg.
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)\
continue; .//when j=8,so teminate, and transfer to j=9
break;// when i=1,j=8,so terminate ,and transfer to i=2;j=0;
1.7 do,while ,for
@@不能在循环中修改循环变量i,防止失控
1.8 void
@@凡是不加返回类型的函数,默认为int型
add(int a,int b)//return int
@@void 指针不能进行算术运算,也不能进行自加减
1.9 return
@@return 不能返回堆栈内的临时局部变量
function(void *pointer)
{
return;//return 返回的是什么?
}
1.10 const
@@const 关键字可理解为readonly变量,不是常量,其值在编译时不能使用,其在编译时编译器不知道其存储的内容。//其他变量在编译时会读取存储的内容么?
在.c文件中:
const int max=100;
int array[max];//报错,说明max仍为一个变量
@@const变量在编译期间不进行内存分配,只保存在符号列表中,因此,没有了内存读写的操作,可提高编译效率
@@const和definition的区别
const只进行一次内存分配,保存在静态存储区,而define在预编译阶段进行替换,有若干个内存中的拷贝。
1.11 volatile
@@volatile应用于避免编译器的默认优化而造成的数据实时性变更丢失。即保证每次都重新读取volatile变量的值,实时进行更新。
@@questions:
const volatile int i=0; //i 是什么类型
1.12 struct
@@空结构体大小为1字节
@@柔性数组(c99支持)
typedef struct st { int i; int a[0]; }st1; //st1 为柔性数组,sizeof(st1)=4, //使用柔性数组时必须保证可变数组前定义 //一个其他成员,当使用变长数组时,要临 //时通过malloc函数为数组分配内存,分 //配内存后,sizeof(st1)=4,保持不变。