1、指针和数组的区别
指针,存储的是一个地址值
数组,存储的是数组变量类型的值,此值可以修改,但是数组的地址不能改
2、malloc、free和new、delete的区别和联系
1)malloc和free是C/C++的标准库函数,new和delete是C++的运算符;
2)malloc和free只能操作基本数据类型,不能创建和销毁类对象,因为需要调用到构造函数和析构函数,但是new和delete就可以;
3)new和delete因为是C++的运算符,需要编译器支持,malloc和free只需要添加头文件;
4)用new申请内存时,不需要指定内存大小,因为编译器会根据类型信息自动分配大小,malloc需要指定内存大小;
5)new创建对象的过程(先调operate new函数,申请内存,底层其实就是malloc实现的,然后通过构造函数把申请到的内存充分给成员),delete释放的过程(先调析构函数,然后调用operate delete函数释放内存,底层也就是free实现的)
注:【1】当将变量free或delete后需要将变量指向NULL,否则指向的位置不确定,而且再次free或delete时会报段错误;
【2】malloc分配内存时,需要判断内存分配是否成功,不成功会返回NULL,new申请不成功时,会直接抛出异常;
【3】C++存储区域有五块,堆、栈、静态存储区/全局存储区、常量存储区、自由存储区,C中没有自由存储区,因为这块是给new分配内存的;
3、*p++ 相当于*(p++),先解引用,再地址加1,所以
数组{1,2,3,4} 经过*p++=*p++;的结果是{2,2,4,4}