/*参考《程序员面试笔试宝典 第二版》机械工业出版社 P54*/
(*p)++ 与 *p++ 之间的区别
第一个是 先取出值,再把值++,p没变,还是指向原来的空间。
第二个是 先取出值,再把p++;
<pre name="code" class="cpp"><span style="font-size:14px;"> int a=2; int *p=&a; cout<<(*p)++<<endl; cout<<*p<<endl; cout<<a<<endl;</span> 结果是:233
<span style="font-size:14px;"> int a=2; int *p=&a; cout<<*p++<<endl; cout<<*p<<endl; cout<<a<<endl;</span> 结果是:2 -858993460 2
================(2)=================================================
若a是变量,则 (a++)+=a;这句是非法的。
因为 a++不能当做左值(取a的地址,把它的值装入寄存器,然后在内存中对a进行++),
而 ++a可以(表示取a的地址,对它的内容进行+1操作,然后把值放入寄存器)。
i++=5 非法 i++的运算结果并不是i这个变量的引用,而是一个临时变量,编译器不允许对一个临时变量重新赋值,上面的表达式会引起编译错误。
++i=5;合法
==================(3)===============================================
如何进行float、bool、int、指针变量与“零值”的比较
(1)int
推荐写法:
if(n==0)
if(n!=0)
(2)float
const float P=0.00001;
if(x>=-P&&X<=P)
错误的写法:
if(x==0.0)或者if(x!=0.0)
(3)bool类型
if(flag)
if(!flag)
(4)指针类型
if(P==NULL)
if(P!=NULL)
==================(4)===============================================
new/delete malloc/free(需要头文件<stdlib.h>) 二者都位于 堆中,操作系统不会回收,需要手动delete\free 具体差别: 1)new 可以自动计算需要分配的内存,而malloc需要手工计算字节数。 int *p=new int [2]; int *q=malloc(2*sizeof(int)); 2)new 与delete 直接带具体类型的指针,malloc与free返回void类型的指针。 3)new是类型安全的,而malloc不是。 int *a=new float[2];会报错,而 int *a=malloc(2*sizeof(float));编译器无法报错 4)new一般有两步,分别是new操作和构造。 5)new将调用构造函数,而malloc不能,delete将调用析构函数,而free不能。 6)new/delete(不需要头文件<stdlib.h>) malloc/free(需要头文件<stdlib.h>)