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无法去改变内存