C++一些基础知识

    xiaoxiao2021-12-10  14

    /*参考《程序员面试笔试宝典 第二版》机械工业出版社 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>)
    转载请注明原文地址: https://ju.6miu.com/read-700312.html

    最新回复(0)