指针和引用
- 是否可变。指针所指向的内存空间在程序运行过程中可以改变,引用所绑定的对象一旦绑定不可改变。
- 是否占内存。指针本身在内存中占有空间,而引用相当于变量的别名,在内存中不占空间。
- 是否可以为空。指针可以为空,引用必须绑定对象。
- 是否可以多级。指针可以有多级,但引用只能一级。
堆和栈
- 申请方式和回收方式不同
- 栈是系统自动分配空间的,例如我们定义一个 char a;系统会自动在栈上为其开辟空间。栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再访问。
- 堆是程序员根据需要自己申请的空间,例如malloc(10);开辟十个字节的空间。堆上的数据只要程序员不释放空间,就一直可以访问到&#