翻到一个PDF C语言深度解刨 ,以前准备面试的时候有准备。
偶尔翻翻,发现网上笔记不少,面试用。
第一章 关键字
定义和声明
定义:编译器创建对象,分配内存。不可多次定义。
声明:告诉编译器,对象已经分配占位。可多次声明。
auto:默认都是auto.
register:小于CPU寄存器变量长度,类型与CPU寄存器符合。
static:
第一个作用:修饰变量,存储在内存静态区域。
静态全局变量:作用于限于定义它的文件中,其他文件extern也无效。
静态局部变量:定义在函数体内,只能在本函数体内使用。
static修饰的变量存储在静态区域,函数结束后不会销毁。static值也不会销毁,下次还会使用。
static int j;
void fun1(void)
{
static int i = 0;
i ++;
}
void fun2(void)
{
j = 0;
j++;
}
int main()
{
for(k=0; k<10; k++)
{
fun1();
fun2();
}
return 0;
}
修饰函数:函数前加static成为静态函数,作用于限于本文件(内部函数)。
好处:不用担心与其他文件中的函数同名。
static 在C 中有了第二种含义:用来表示不能被其它文件
访问的全局变量和函数。
size: 关键字,非函数。
`sizeof(int)*p 表示什么意思?
留几个问题(讲解指针与数组时会详细讲解),32 位系统下:
int *p = NULL;
sizeof(p)的值是多少?
sizeof(*p)呢?
int a[100];
sizeof (a) 的值是多少?
sizeof(a[100])呢?//请尤其注意本例。
sizeof(&a)呢?
sizeof(&a[0])呢?
int b[100];
void fun(int b[100])
{
sizeof(b);// sizeof (b) 的值是多少?
}
signed,unsigned
if,else
if后面带;号,表示结束语句。
如有可能写成 if(!b) null;
bool 与零值比较
bool bTestFlag=FALSE;
if(bTestFlag)
if(!bTestFlag)
float变量与零值比较
`#define EPSINON 0.00000001`
float fTestVal =0.0;
if(fTestVal>=-EPSINON)&&(fTestVal<=EPSINON);//EPSINON精度
指针变量与“零值”比较
int *p=NULL;
if(NULL==p);
if(NULL!=p);
左值问题,避免赋值给p.==会被写成=。
switch case
switch(Variable)
{
case Value1:
//program code
break;
case Value2:
//program code
break;
case Value3:
//program code
break;
default:
break;
}
每个case结尾不要忘记break;
必须保留default,不是语法上问题。
case后面只能是整数或字符类型常量或常量表达式。
case语句排列建议:
1.按照字母或者数字顺序
2.把正常情况放在前面,异常放在后面处理。
3.按照执行频率排列case语句。
do while for关键字
break与continue
break,终止本次循环
continue,终止本次(本轮)循环。