学习目标
(1)数组名和指针的区别。
(2)堆和栈的区别。
(3)malloc和new的区别。
(4)struct和class在c++中的区别。
(5)c++中的类有几个访问权限。
一、数组和指针的区别
(1)数组是一个固定大小的连续内存块,可以存储相同类型的元素。
(2)数组名是该数组第一个元素的地址。
(3)数组名就是数组首元素的地址,也可以看作一个常量指针,这个指针是不能修改指向的。
(4)使用指针访问数组的时候需要使用到解引用*,指针访问数组是间接访问,数组名访问数组是直接访问。
(5)使用sizeof对指针进行计算的时候是不同的,指针的大小和编译器位数有关,使用sizeof计算数组名是整个数组的大小。
二、堆和栈区别
(1)创建方式不同:栈是系统自动创建,主要用于保存局部变量,当函数执行完成,栈被销毁;
堆是程序员手动进行创建和释放的,malloc进行创建,free进行释放。
(2)空间大小不同:栈空间比较小,堆空间比较大。
(3)访问速度不同:栈比堆块。
(4)生命周期不同:栈使用完后自动销毁,堆手动销毁。
三、malloc和new的区别
(1)malloc是c语言中标准库函数,new是c++中的操作。
(2)malloc分配内存后返回的是void * 类型的指针,new分配内存后返回的是对应对象类型的指针。
(3)malloc分配内存的时候需要进行指定分配内存的大小,使用new进行内存分配时不需要指定。
(4)使用malloc分配内存的时候不会调用到构造函数,使用new分配内存会调用到构造函数。
四、struct和class在c++中的区别
(1)struct成员默认是公有的,class成员默认是私有的。
(2)继承方面,struct是公有继承,class是私有继承。
(3)使用场景方面:struct一般是用于做简单的数据结构,class一般用于封装和继承。
五、c++中类有几个访问权限
(1)在c++中类有三个访问权限:公有的、私有的、受保护的。
(2)public:当成员声明为public,就可以在类的外部进行访问。
(3)private:当成员声明为private,只能在类的内部进行访问。
(4)protect:当成员声明为protect,只能在类的内部或是子类中进行访问。