欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c与c++里malloc和new,引用和指针的一些区别

程序员文章站 2024-03-07 20:37:15
...

malloc与new有什么区别?
1.malloc是c标准库函数 new是c++中的操作符
2.malloc不会调用类的构造函数 new会自动调用类的构造函数
3.malloc可以申请数组的内存空间 new只能申请单个变量的内存空间 new[] 才能申请数组
4.malloc需要给定申请内存大小的字节数 new只给类型自己会计算
5.malloc返回的是void* new返回的是指定类型地址
6.malloc出错返回NULL new出错抛出异常

引用与指针的区别?
引用是C++中 c和c++都可以使用指针 引用的底层实现就是指针
指针是实体变量 引用不是实体变量
sizeof(指针) == 固定值
sizeof(引用) 随着引用目标不同 大小不同
(1)引用必须初始化 指针可以不初始化(野指针)
int& r = x; int p;
(2)引用目标不能为空 指针指向可以为空
int
p = NULL;
p = NULL;
(3)引用一旦初始化 引用目标不能改变 指针任何时候都可以修改目标
int *p = &a;
p = &b;
(4)可以声明指针的引用 但不可以声明引用的指针
int p;
int
& pr = p;

	int a = 10;
	int& r = a;
	int& *pa = &r;//Error

(5)可以声明指针的指针  但不可以声明引用的引用
	指针的指针 其实就是二级指针
	int a = 10;
	int& r = a;
	int&& rr = r;//Error
	int& rr = r;
(6)可以声明指针数组  但不可以声明引用数组
	int *arr[3] = {};
	int &brr[3] = {};
(7)可以声明数组的引用  也可以声明数组的指针
	int arr[3] = {1,2,3};
	int (&ra)[3] = arr;
	int (*par)[3] = &arr;