malloc与new,C++中的指针与引用,C++struct与class的区别

一.struct与class的区别

  1. struct与class的区别不大

    在默认情况下,class默认的权限是private(私有的),struct默认的是public(共有的)。

  2.但是在C++中,struct进行了扩展,现在它已经不仅仅是一个包含不同数据类型的数据结构了,它包括了更多的功能。

二 .malloc与new,delete与free的区别

  1.malloc与free是库函数里的函数,调用时要添加头文件,delete与new是C++中的运算符

  2.malloc返回值是void*指针,new返回的是有类型的指针

  3.malloc创建时不会调用构造函数,free不用调用析构函数,但new与delete会自动调用

  4.delete不可以重复释放,但是可以释放空指针。

三.指针与引用

《A.引用》  

  1.通俗的讲,引用就是取别名

  2. 引用必须初始化,不能定义空引用,“野引用”,“悬空引用”是存在的(引用堆内存的数据,当堆内存释放后就不应该使用了)

  3.引用只能是一次性的,无法再更改(引用一旦成功,他就是一个变量了)

  4. 引用也可以当做函数的参数,它引用的对象就是函数的实参,引用可以达到指针的效果

    a.函数之间共享变量(指针也可以)

    b. 提高参数的传递效率(比指针要高)

    c. 当参数来使用,

      建议:能使用引用就不要使用指针,但是引用不可以取代指针

  5. 引用也可以当做函数的返回值,但绝不能返回局部变量的引用

《B.指针》

  1.可以在这三种情况下使用指针:1.函数之间共享变量 2. 使用堆内存 3. 优化传参 4. 可以访问硬件内存

  2. 使用指针要注意的情况

    1. 定义指针变量时初始化

    2. 不返回局部变量的地址

    3. 指针所指向的空间被释放时,要即使置空

  3. 与const相关的指针

    const int* p :不能通过*p去修改他指向的内存

    int const* p 不能通过*p去修改它指向的内存

    int * const p : 无法改变p

    const int * const p :p无法改变,*p无法去改变内存

原文地址:https://www.cnblogs.com/gumpzlc/p/9532378.html