c语言和c++在 动态内存分配 方面的区别:
1.c语言用malloc函数实现;c++用new关键字来实现。
2.malloc是由c库提供的函数;new关键字是c++的一部分。(也就是说一些简单的c语言平台可能没有malloc库,也就无法支持动态内存分配。而c++则任何情况都可用)
3.malloc是以字节为单位进行内存分配;new是以具体类型为单位进行分配。
4.malloc在分配内存的时候不支持数据初始化;new支持同时分配和初始化数据。
举例1:
定义一个int型指针p,该指针指向一个动态分配的空间,则可用:
int* p = new int; //分配动态内存
delete p; //释放该空间
举例2:
定义一个int型数组p[],该数组有5个元素,则可用:
int* p = new int[5]; //分配动态内存
delete[] p; //释放该数组,这里如果遗漏[]会导致除第一个元素外,其它的元素都没有释放,从而导致内存泄漏。
举例3:
new关键字初始化
float* f = new float(2.0f); //分配动态内存,同时初始化为2.0f
c++是种强类型语言,做赋值运算的时候其实等号两边的类型都是确定的。要想赋值成功,要么两边类型一致,要么两边类型具备某种关系(继承或者实现)。浮点类型的字面量类型默认是double,由于float类型和double类型在内存中的二进制表现形式不同,不能像整型那样有时会默认转换,必须要确定类型,带上f。
考点1:
int* p1 = new int(2); 和 int* p2 = new int[2]; 的区别?
答:
p1指向一个动态分配的空间,该空间被初始化为2;
p2指向一个动态分配的数组空间,该数组有两个元素。
考点2:
int* p= new int[10]; 这里p指向的内存占用多大空间?
答:至少40个字节,因为动态申请的内存空间可能比实际需要的大一点。