那些年容易犯错的知识点(回顾)

来源:互联网 发布:淘宝关键字 编辑:程序博客网 时间:2024/06/15 15:01

点击打开链接(原文)

一、float变量与零值的比较



float,double变量都是不精确的,不可以用==或者!=来比较,要比较float和0:


const float NORM=0.00001;


float flag=0;


if((flag>=-NORM)&&(flag<=NORM))


{


  equal


}


Else


{


not equal


}


二、sizeof和strlen比较


1、sizeof是操作符,strlen是函数


2、sizeof的参数可以是数据类型也可以是变量,strlen的参数只能是以’\0’结束的字符串


3、sizeof求的是参数占用内存大小,strlen求的是字符串长度,不包括结束符


4、数组作sizeof参数时不退化,传递给strlen时退化为指针。


三、malloc与new区别


1,new delete 是操作符可以重载,只能在c++中使用


2,malloc free是函数,可以覆盖,c、c++都可以使用


3,new delete分别调用对象的构造函数和析构函数


4,malloc仅分配内存,free回收内存


5,new delete返回某种数据类型的指针,而malloc和free返回空指针


四、指针式一种普通变量,其保存的数据是整型数据,和整型变量不同的是,它保存的整型数据指向一个内存地址


五、堆区:动态内存分配,malloc new申请,freedelete释放


栈区:函数内局部变量的创建都在栈上,函数执行结束,自动释放


全局区:全局变量,静态变量


文字常量区


程序代码区


六、设置地址为0x67a9的整型变量的值为0xaa66


int *ptr;


ptr=(int *)0x67a9;


*ptr=0xaa66;


 


七、计算二叉树深度


     Int depth(BiTree T)


     {


              if(!T) return 0;


              int d1=depth(T->lchild);


              int d2=depth(T->rchild);


              return(d1>d2?d1:d2)+1;


       }


七、判断是否是2的n次方 若x&(x-1)==0,则是


八、Volatile,说明变量在程序执行中可能会被隐形改变(编译器之外的情况)


九、Sizeof更像是一个宏,在编译期间确定结果


Strlen在函数执行时确定结果


十、int *p=NULL;


sizeof (p)------------------------4


sizeif(*p)------------------------4


int a[100]


sizeof(a)--------------------------400


sizeof(a[100])--------------------4


sizeof(&a)------------------------400


sizeof(&a[0])---------------------4


sizeof(void)-----------------------0


sizeof(void *)---------------------4


十一、case语句中,后面只能是整型和字符型的常量或者常量表达式字符型在内存里也是按整数存储的


十二、定义静态变量ct,当程序中没有初始化时,编译器自动初始化为0;


十三、关于case


   switch(s)


              {


              case 1:printf("%d",s+5);


              case2:printf("%d",s+4);;


              case 3:printf("%d",s+3);


              default:printf("%d",s+2);break;


              }


  当输入1,时,运行结果输出:6543 一直到遇到break语句结束。Case只是个入口,一旦进去,在遇到break之前,一直执行到底。
原创粉丝点击